2012-03-25 17 views
0

私のC++プログラムはstd :: logic_errorで終了し、それを引き起こしたソース行を追跡したいと思います。どうやってやるの?std:logic_errorの任意の行番号を取得

TBH、私はデバッグ情報を追加するためにg ++ -gを使ってgdbを使用しています。私が得ることができるのは、これらのメッセージです:

このアプリケーションは異常な方法でそれを終了するようにランタイムを要求しました。 詳細については、アプリケーションのサポートチームにお問い合わせください。あなたはデバッガを使用

Catchpoint 1 (exception thrown), 0x0045ffa0 in __cxa_throw() 
(gdb) bt 
#0 0x0045ffa0 in __cxa_throw() 
#1 0x004601e8 in std::__throw_logic_error(char const*)() 
#2 0x00502238 in typeinfo for std::__timepunct<wchar_t>() 
#3 0x004685f8 in std::runtime_error::what() const() 
#4 0xda8 in ??() 
#5 0x002efbcc in ??() 
#6 0x00468734 in std::domain_error::~domain_error()() 
#7 0x00000000 in ??() 
(gdb) 

答えて

0

例外オブジェクトには、送信元情報が含まれていません。しかし、彼らはwhat()のメンバーを使ってアクセス可能な有用なメッセージを含むことを願っています。それ以外の場合は、例外がスローされたときにブレークしたり、コンストラクタにブレークポイントを設定したりするデバッガをstd::logic_errorに設定する必要があります。例外が例外的である限り、これは問題なく動作します。非例外的な場合に例外をスローするコードではうまく動作しません。

+0

ありがとうございます、あなたの答えは実際には正しいですが、私はg ++とgdbを使用しようとしていることを忘れていました。 – Mael

2

有効ではないのbasic_string :: _ S_constructヌル: は 'STD :: logic_error' 何()のインスタンスを投げた後に呼び出さ終了します。

デバッガツールを使用することは、CやC++などのコンパイル言語で学ぶ非常に重要なスキルです。

関連する問題