バックグラウンド
- Poof-Crash [ 1 ]のあるアプリケーションがあります。吹き飛ばされたスタックが原因であると確信しています。
- アプリケーションはマルチスレッドです。
- " " でコンパイルしてい
Enable C++ Exceptions: Yes With SEH Exceptions (/EHa)
ます。 - SE トランスレーター関数を作成し、それを呼び出し
_set_se_translator()
ました。 set_terminate()
と setupとの関数を書きましset_unexpected()
た。- スタック オーバーフローを取得するには、負荷の高い状態でリリース モードで数日間実行する必要があります。アプリケーションは、問題を確認するために必要なランタイムを達成するのに十分な速度で実行できないため、デバッガーの下で実行することはできません。
- 関数の 1 つの実行時に無限再帰を追加することで問題をシミュレートし、
EXCEPTION_STACK_OVERFLOW
例外のキャッチをテストできます。 - クラッシュ ダンプ プログラムとして WinDBG をセットアップしましたが、他のすべてのクラッシュの問題に関する適切な情報が得られますが、この問題に関する情報は得られません。クラッシュ ダンプには、'Sleep()'ing である 1 つのスレッドのみが含まれます。他のすべてのスレッドは終了しました。
質問
EXCEPTION_STACK_OVERFLOW
私が試したことのどれも、例外を拾うことにはなりませんでした。
リリースモードでの実行時にこの例外が発生する可能性を保証する方法を知っている人はいますか?
定義
- Poof-Crash : アプリケーションがクラッシュし、"poof" して跡形もなく消えます。
(このサイトの名前を考えると、この質問がまだここにないことに驚きました!)
ノート
- スタックサイズを調整して問題をより早く強制し、デバッガーでキャッチできるようにすることについての簡単な回答が投稿されました。それは賢明な考えですが、残念ながら、それが役立つとは思えません。この問題は、無限再帰につながるコーナー ケースが原因である可能性があります。スタックを短くしても、問題がすぐに明らかになることはなく、有効に深いコードで無関係なクラッシュが発生する可能性があります。良いアイデアですが、削除してしまったにもかかわらず、投稿していただきありがとうございます。