以下のようなカスタム例外があります
class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
} myex;
void testException(){
throw myex;
}
void doSomething2(){
testException();
}
void doSomething1(){
doSomething2();
}
int main () {
try
{
doSomething1();
}
catch (exception& e)
{
cout << e.what() << '\n';
}
return 0;
}
だからメイン関数では、スローの呼び出し元(どの関数が例外をスローしたか)を知ることができません、その詳細を取得する方法は?
回答 2 件
これは役立つはずです:
gcc C ++プログラムがクラッシュしたときにスタックトレースを自動的に生成する方法
呼び出しスタックを印刷し、例外ハンドラーで印刷する方法を見つけることができます。
関連記事
- ヌルキーを挿入するときにハッシュテーブルに例外をスローさせる方法(Java)?
- forループを中断せずにどのように例外をスローしますか?
- 日付にタイムゾーンが含まれていない場合、FormDataBodyPart/Jacksonからjson入力があった場合、例外をスローします
- IsCancellationRequestedまたはThrowIfCancellationRequestedを呼び出さずにタスクをキャンセルして例外をスローする方法
- リストにRadioButtonを追加すると、null引数例外がスローされるc#
- メソッドが例外をスローしないことをテストする方法は?
- newを呼び出さずに、 `method_missing`でカスタム例外をスローします
- 配列を返すようにこのPHP例外をスローするにはどうすればよいですか?
- このベクトルコンストラクターがstd - : bad_alloc例外をスローする理由
簡単なことはありませんポータブル
C++
でこれを行う方法 私が知っていること。オペレーティングシステム固有の呼び出しを使用して完全なスタックトレースを取得するには、かなり複雑な方法がいくつかあります。例外のソースを取得するために使用する最も簡単な方法は、マクロを使用することです。
回避できるマクロはお勧めしませんが、これは有用であることが証明されている数少ない場所の1つです。
私はこれより少し複雑なものを使用する傾向がありますが、これが基本です:
完全なトレースは取得できませんが、例外がスローされた場所を確認できます。 MACROには、
NDBUG
の場合にのみデバッグ情報が含まれます。 設定されていません解放する ビルドは、デバッグ情報を無効にするためにそのマクロを設定する必要があります。