0

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

但是,我有一种情况,我想在函数内设置断点,以便当这个函数通过异常(而不是正常返回)离开时,调试器停止。

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

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

我会注意到,当前的两个答案都通过添加与该问题无关的代码来解决该问题。如果我们通过异常退出而不添加或更改任何代码,我想中断函数退出(展开) 。

4

2 回答 2

1

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

void foo() {
    try {
        // old function body
    }
    catch (...) {
        throw; // put a breakpoint here
    }
}
于 2013-10-23T21:23:54.310 回答
0

怎么样:

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

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

int myFunc()
{
     ExceptionDetector   exceptionDetector;

     // STUFF
}

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

于 2013-10-24T17:13:39.780 回答