我正在寻找 MS VC++ 中的答案。
在调试大型 C++ 应用程序时,不幸的是,它大量使用了 C++ 异常。有时我比实际想要的晚一点才捕获异常。
伪代码示例:
FunctionB()
{
...
throw e;
...
}
FunctionA()
{
...
FunctionB()
...
}
try
{
Function A()
}
catch(e)
{
(<--- breakpoint)
...
}
我可以在调试时用断点捕获异常。但是如果异常发生在 FunctionA()
或 FunctionB()
或其他一些函数中,我无法追溯。 (假设大量异常使用和上述示例的巨大版本)。
我的问题的一个解决方案是确定并保存调用堆栈在异常构造函数中(即在它被捕获之前)。但这需要我从这个基异常类派生所有异常。它还需要大量代码,并且可能会减慢我的程序。
有没有更简单的方法需要更少的工作?无需更改我的大型代码库?
其他语言有没有更好的解决这个问题的方法?
最佳答案
您指向了代码中的断点。由于您在调试器中,您可以在异常类的构造函数上设置断点,或设置 Visual Studio 调试器以中断所有抛出的异常(Debug->Exceptions 点击 C++ 异常,选择已抛出和未捕获的选项)
关于c++ - C++中的异常被捕获后找出源头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077/