c++ - C++中的异常被捕获后找出源头?

标签 c++ visual-studio winapi exception visual-c++

我正在寻找 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/

相关文章:

C++ 编译错误(有符号和无符号整数表达式的比较)

visual-studio - 如何重置 "Don' t 再次显示此对话框” Visual Studio 和 ReSharper 的设置

winapi - SHLoadIndirectString() 如何在内部工作?

c++ - Visual Studio 2015 : C++ code analysis error C1253, 无法加载模型文件 'res://mspft140.dll/300'

visual-studio - 如何将VsVim中的键映射到Visual Studio命令?

windows - PrintWindow 位图不同于 PrintScreen Key 位图

windows - 通过 GetModuleHandle/LoadLibrary 和使用 FreeLibrary 加载 DLL

c++ - 如何忽略/删除接触图像边界的轮廓

c++ - '&' 在 C++ 中是什么意思?

c++ - cv::mean 对于非黑色像素