-3

そのraiseコマンドがスタックオーバーフローを引き起こす例外があります。何をすべきかを知るために、この記事を読みました: http://www.debuggingexperts.com/modeling-exception-handling

私が理解したのは、例外0xc0000025は、キャッチすることを禁じられている例外をキャッチしようとすることを意味します(EXCEPTION_NONCONTINUABLE_EXCEPTION)。私は正しいですか?

もしそうなら、例外が継続不可能と定義された原因を知りたいです。例外は Pascal で定義され、オブジェクトから派生しExceptionます。

さらに、この例外が処理される場所を見つけることができず、自分でtry-catchブロックを追加しました。例外が正常にキャッチされました。なんで?

編集

助けが必要な特定の状況を説明したいと思い
ます。Pascal コードを呼び出す C++ コードがあり、例外定義があり、その中でraiseコマンドが発生します。C++ コードにブロック
を配置する前に、Pascal ではスタック オーバーフローまでの 1000 回の例外が発生します。C++ コードにブロック を追加した後、Pascal コードは C++ コードのブロックに戻りました。try-catchraiseEXCEPTION_NONCONTINUABLE_EXCEPTION
try-catchraisecatch

今、私は2つの質問があります:

  1. NONCONTINUABLE最初の例外でプロセスが停止しなかったのはなぜですか?
  2. catchC++ コードのブロックがこの例外を引き起こさなかったのはなぜですか?
4

1 に答える 1

4

EXCEPTION_NONCONTINUABLE_EXCEPTION は、プログラムが継続できない例外から継続しようとしたことを意味します。ただし、Delphi でそのような例外を定義することはできないため、問題の原因は別の場所にあります。

カスタム例外タイプの作成、発生、キャッチ、および破棄をデバッグすることを検討してください。プログラムに外部ライブラリが含まれる場合、特に Delphi 以外で記述されたライブラリがある場合は、それらが外部例外の処理方法を認識しているか、例外から完全に保護されていることを確認してください。

于 2013-03-12T12:07:46.957 に答える