如何在 C++ 中获取堆栈跟踪错误异常?

问题描述 投票:0回答:1

我在其中一个第三方库中遇到以下错误,我无法访问其中的代码。这个错误是间歇性地抛出的,我不知道是什么导致了这个错误,因为我无法查看代码。该库采用 .SO 扩展名,在 Linux 中运行,该库是用 C++ 版本 11 编译的,我的函数中使用 e.what() 有异常捕获例程。

发生了无效的内存引用(分段违规)。

无论如何,我可以在抛出该错误时查看该错误的堆栈跟踪吗?另外,关于该错误是什么的任何建议或建议?

c++ error-handling
1个回答
0
投票

如果您可以在调试器中重现,那将是最简单的。 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

© www.soinside.com 2019 - 2024. All rights reserved.