当函数通过异常离开时C++闯入调试器

Break into debugger when function is left via C++ exception?

本文关键字:C++ 闯入 调试器 离开 异常 函数      更新时间:2023-10-16

注意:我知道如何在抛出异常时中断。

但是,我想在函数中设置断点,以便在通过异常(而不是正常返回)离开此函数时,调试器停止。

这可以通过在反汇编中设置断点来实现吗?如果是,如何找到正确的指令 - 如果不是,还有什么?

我的代码是 x86,但我会对也涵盖 x64 的一般答案感兴趣。

我会注意到,当前的两个答案都通过添加代码来解决这个问题,这不是这个问题的内容。我想打破函数退出(展开),如果我们通过异常退出而不添加或更改任何代码

在纯C++中,您始终可以在整个函数体周围添加一个try/catch,并立即重新抛出异常。当然,您会在throw语句上放置一个断点:

void foo() {
    try {
        // old function body
    }
    catch (...) {
        throw; // put a breakpoint here
    }
}

怎么样:

class ExceptionDetector
{
     public:
          ExceptionDetector() {}
         ~ExceptionDetector()
          {
              if (std::uncaught_exception())
              {
                     std::cout << "Exception in Flightn";  // Put break point here.
              }
          }
};

现在在您的函数(或方法)中。

int myFunc()
{
     ExceptionDetector   exceptionDetector;
     // STUFF
}

如果将断点放入上面的析构函数中。
当引发异常时,您将暂停程序,就像它即将退出函数一样。