注意:我知道在抛出异常时如何中断。
但是,我有一种情况,我想在函数内设置断点,以便当这个函数通过异常(而不是正常返回)离开时,调试器停止。
这可能通过在反汇编中设置断点来实现吗?如果是,如何找到正确的指令 - 如果不是,还有什么?
我的代码是 x86,但我会对也涵盖 x64 的一般答案感兴趣。
我会注意到,当前的两个答案都通过添加与该问题无关的代码来解决该问题。如果我们通过异常退出而不添加或更改任何代码,我想中断函数退出(展开) 。
注意:我知道在抛出异常时如何中断。
但是,我有一种情况,我想在函数内设置断点,以便当这个函数通过异常(而不是正常返回)离开时,调试器停止。
这可能通过在反汇编中设置断点来实现吗?如果是,如何找到正确的指令 - 如果不是,还有什么?
我的代码是 x86,但我会对也涵盖 x64 的一般答案感兴趣。
我会注意到,当前的两个答案都通过添加与该问题无关的代码来解决该问题。如果我们通过异常退出而不添加或更改任何代码,我想中断函数退出(展开) 。
在纯 C++ 中,您总是可以try/catch
在整个函数体周围添加 a,然后立即重新抛出异常。当然,你会在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 Flight\n"; // Put break point here.
}
}
};
现在在你的函数(或方法)中。
int myFunc()
{
ExceptionDetector exceptionDetector;
// STUFF
}
如果你把断点放在上面的析构函数中。
当抛出异常时,您将暂停程序,就像它即将退出函数一样。