我在其中一个第三方库中遇到以下错误,我无法访问其中的代码。这个错误是间歇性地抛出的,我不知道是什么导致了这个错误,因为我无法查看代码。该库采用 .SO 扩展名,在 Linux 中运行,该库是用 C++ 版本 11 编译的,我的函数中使用 e.what() 有异常捕获例程。
发生了无效的内存引用(分段违规)。
无论如何,我可以在抛出该错误时查看该错误的堆栈跟踪吗?另外,关于该错误是什么的任何建议或建议?
如果您可以在调试器中重现,那将是最简单的。 gcc 中的
catch throw
将在抛出异常时中断。
或者以编程方式检索异常的堆栈跟踪:
P2490 已被 C++26 接受,将添加
[[with_stacktrace]]
和 std::stacktrace::from_current_exception
。
对于较旧的 C++ 版本,cpptrace 提供了许多工具来帮助解决此问题。要获取捕获异常的堆栈跟踪,可以将
cpptrace::from_current_exception
与 try/catch 宏结合使用。更多信息这里。对于未捕获的异常,您需要从 std::terminate
打印堆栈跟踪。 Cpptrace 提供了一种简单的方法来做到这一点,使用 cpptrace::register_terminate_handler
。