状況は次のとおりです。スレッドAは例外をキャッチし、例外のデータをメモリ内のどこかに(例外フィルタのGetExceptionInformationを使用して)保存し、その後スレッドBはその例外情報を取得して再スローします。しかし、スレッドBがキャッチされた例外をrethrowsとき、私は例外につながる元の呼び出しスタックがありません。
元のコールスタックを失うことなく例外を元に戻すにはどうすればよいですか? (この質問はC++に関するものです)。元の呼び出しスタックを失うことなく例外を再現する方法はありますか?
答えて
キャッチブロック内のスタックを巻き戻して、再スローする例外の一部として保存することができます。 C++でスタックを巻き戻すのはちょっと難しいですが、例としてWxWidgetsが付いたクラッシュダンプコレクタコードを見てみることができます。
私のケースでは完全には実用的ではないが答えとしてマークされている –
質問は、スタックを「受信」スレッドに渡す必要がある理由です。
私は基本的にそれをいくつかのエラーログに報告するためにスタックが必要と仮定します。キャッチスレッドでスタックを歩いたり、ミニダンプを生成したり、収集したいエラー情報を生成したりして、受信スレッドに例外のコピーを渡すことができます(可能であればスライスに注意してください)。
例外は私が一種のフォークジョインルーチンの中で捕らえたものです。そのため、あるワーカースレッドで例外がスローされた場合は、そのスレッドをメインスレッドに渡してそこに再投入したい(+元のスタックを失いたくない) –
- 1. Pythonの再帰と例外、再帰的スタックを失うことなく例外をキャッチする方法
- 2. 例外の呼び出し元を検索しますか?
- 3. 例外のキャッチと再呼び出し
- 4. UISwipeGesturesを失うことなくloadNibNamedを呼び出す方法は?
- 5. CloudBlockBlob.DownloadTextAsync呼び出しがoutofmemory例外で失敗することがある
- 6. メソッドの呼び出しに失敗したことの例外
- 7. Pythonでは、元の呼び出しスタックを維持しながら例外を調べて再起動するにはどうすればよいですか?
- 8. Python例外が呼び出しスタックを上回るか?
- 9. freemarker:私は呼び出し元のURLを知ることができる方法はありますか?
- 10. 復元nuget:例外が呼び出し
- 11. .all呼び出しをキャッシュする方法はありますか?例えば
- 12. 再帰呼び出しを元に戻す方法は?
- 13. URLにリダイレクトする方法と、呼び出し元関数に値を返す方法はありますか?
- 14. Pythonクラスメソッド - 呼び出しを短くする方法はありますか?
- 15. ミドルウェアを復元する - スタック内の次のミドルウェアを正しく呼び出す
- 16. メソッドまたは呼び出し元のメソッドで例外をスローする
- 17. フォーカスに関係なくonKeyDownを呼び出す方法はありますか?
- 18. コントロールイベントを呼び出さない方法はありますか?
- 19. Spring @Controller例外ハンドラとグローバル例外ハンドラ。両方を呼び出す方法
- 20. unixソケットのopen()呼び出しをsocket()とconnect()呼び出しにマップする方法はありますか?
- 21. JSF 2 - 呼び出し元ページに戻るためにはどのような方法がありますか?
- 22. 再帰呼び出しスタックを補助空間として考慮する必要がありますか?
- 23. グローバルjsからイメージを呼び出す方法はありますか?ここ
- 24. xslスタイルシートから外観を呼び出す方法はありますか?
- 25. セキュリティ例外 - 不明な呼び出し元のパッケージ名-Android 6.0.1
- 26. 呼び出し元クラスのコピーコンストラクタをpimplクラスから呼び出す方法は?
- 27. javascript DOM Element Objectを返す方法と、呼び出し元からappendChild(obj)を呼び出す方法はありますか?
- 28. C#でMain関数を再度呼び出す方法はありますか?
- 29. Javascriptで元の呼び出し元関数にデータを返す方法はありますか?
- 30. REST APIを呼び出さずにTwilio呼び出しが失敗したことを知る方法はありますか?
ちょうど私がC#に特有の答えを得られなかったことを確認したかっただけです:) –
解決策のいくつかは、言語/プラットフォーム固有のものです。 C++とC#の例外は異なります。また、C++の例外はプラットフォームによって異なるように実装されています。 –
良い解決策はこの[スタックオーバーフロースレッド]で説明されています(http://stackoverflow.com/questions/23820633/gdb-prevent-losing-backtrace-in-a-catch-rethrow-situation) –