通过C ++异常离开函数时进入调试器?

时间:2013-10-23 21:19:58

标签: c++ debugging visual-c++ exception-handling visual-studio-debugging

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

但是,我有这样的情况,我想在函数内部设置断点,以便当通过异常(而不是正常返回)保留此函数时,调试器会停止。

这可能是setting a breakpoint in the disassembly吗?如果是,如何找到正确的指令 - 如果不是,还有什么?

我的代码是x86,但我会对包含x64的一般答案感兴趣。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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
}

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