当函数通过异常离开时C++闯入调试器
Break into debugger when function is left via C++ exception?
注意:我知道如何在抛出异常时中断。
但是,我想在函数中设置断点,以便在通过异常(而不是正常返回)离开此函数时,调试器停止。
这可以通过在反汇编中设置断点来实现吗?如果是,如何找到正确的指令 - 如果不是,还有什么?
我的代码是 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
}
如果将断点放入上面的析构函数中。
当引发异常时,您将暂停程序,就像它即将退出函数一样。
相关文章: