0

谁能解释一下C++ Builder XE中的以下“调试器故障通知”是什么意思:

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

它仅在我需要抛出异常时发生 - throw 的调用会引发此错误。我找不到有关此问题的任何信息。

抛出异常:

#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

您所看到的是完全正常的行为。您所看到的称为“第一次机会异常”消息。在应用程序看到异常之前,调试器正在报告该消息。这可以从消息中的文本中看出:“进程已停止。使用 Step 或 Run 继续”。只需按照消息中的说明进行操作 - 只需按 F9 或按工具栏上的“运行”按钮即可继续执行,异常将被传递回应用程序以在其try/catch块中进行正常处理。

于 2012-04-10T22:57:49.967 回答
0

我向你们所有人道歉,问题出在 throw 语句之前的构造中:

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

你能看出问题吗?该sscanf函数为该格式字符串返回"%02x"一个长值(4个字节),但我有一个字节变量value(1个字节) - 所以3个字节被写入某处并且堆栈被损坏(或其他东西),是什么导致我的问题......

感谢您的帮助

于 2012-04-12T13:33:16.297 回答
0

这不只是调试器的说法,“我刚刚注意到抛出了一个异常,你想做什么?”

如果您不希望调试器在抛出异常时停止,则可以使用相应的设置。

如果您选择继续,那么您的代码应该会捕获它。

于 2012-04-10T15:05:35.563 回答