当遇到异常时,行上只有一个断点抛出异常,因为它是库中非常疯狂的方法,我想知道破坏异常的确切调用堆栈,可以用Java / Python等其他语言很容易地做到这一点......
如何使用VS2017 C ++做到这一点?或者有办法做到这一点吗?
答案 0 :(得分:0)
虽然不能直接回答您的问题,但我想指出的是,您可以使用跨平台的方式获得很好的回溯记录,仅使用标准C ++ 11 即可,而无需调试器或繁琐的日志记录:
std::nested_exception
和std::throw_with_nested
它在StackOverflow here和here上进行了介绍,如何通过简单地编写适当的异常处理程序(将其重新抛出嵌套)来在代码内对异常进行回溯例外情况。
但是,它将要求您在要跟踪的函数中插入try/catch
语句。
由于您可以使用任何派生的异常类执行此操作,因此可以向此类回溯中添加很多信息! 您还可以看看我的MWE on GitHub或我的"trace" library,其中的回溯看起来像这样:
Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"