0

次の「Debugger Fault Notification」が C++ Builder XE で何を意味するのか説明してもらえますか。

"Project ... faulted with message: 'application-defined exception (code 0x0eefface) at 0x755ad36f. Process Stopped. Use Step or Run to continue."

例外をスローする必要がある場合にのみ発生します。スローを呼び出すと、このエラーが発生します。この問題に関する情報が見つかりません。

例外のスロー:

#define MY_ERROR_CODE 0xE0000046

throw TMyTrouble(MY_ERROR_CODE, "My error message"); // calling of this raises the application-defined exception...

キャッチ:

try{
Function(); // function that raises the exception TMyTrouble
}
catch(...){ // this catch should catch the exception but it doesn't
// do something
throw; // throw to upper layer
}

例外の定義:

class TMyTrouble{
      public:
        TMyTrouble(int errorCode = 0xFFFFFFFF, AnsiString errorMessage = "Unknown error") { FMessage = errorMessage; FCode = errorCode;}
        __property AnsiString Message = {read = FMessage};
        __property unsigned long Code = {read = FCode};

      private:
        unsigned long FCode;
        AnsiString FMessage;
    };
4

3 に答える 3

1

あなたが見ているのは完全に正常な動作です。表示されているのは、「最初のチャンスの例外」メッセージと呼ばれます。アプリが例外を確認する前に、デバッガーによってメッセージが報告されています。これは、「プロセスが停止しました。続行するには、ステップまたは実行を使用してください」というメッセージ内のテキストによって明らかです。F9 キーを押すか、ツールバーの [実行] ボタンを押して実行を続行すると、try/catchブロック内で通常の処理のために例外がアプリに返されます。

于 2012-04-10T22:57:49.967 に答える
0

それは、「例外がスローされたことに気づきました。どうしたいですか?」というデバッガーの言い方ではありませんか?

例外をスローしたときにデバッガーを停止したくない場合は、そのための設定があります。

継続を選択した場合、コードはそれをキャッチする必要があります。

于 2012-04-10T15:05:35.563 に答える
0

すべての人に申し訳ありませんが、throw ステートメントの前の構造に問題がありました。

byte value;
sscanf(buffer, "%02x", &value);

問題が見えますか?関数はそのsscanfフォーマット文字列"%02x"に対して long 値 (4 バイト) を返しますが、バイト変数value(1 バイト) を持っているため、3 バイトがどこかに書き込まれ、スタックが破損 (または何か) したため、問題が発生しました...

助けてくれてありがとう

于 2012-04-12T13:33:16.297 に答える