Linux C 和 C++:在处理 SIGSEGV 等信号时,我还应该记录什么?

发布于 2024-09-29 01:48:48 字数 329 浏览 2 评论 0原文

在一些 Linux (Ubuntu) 系统上工作,运行一些内部 C 和 C++ 应用程序 (gcc)。

要处理的信号有一长串,例如 SIGSEGVSIGINT。在收到信号时,使用 backtrace(3)backgrace_symbols(3) 获取调用堆栈。对于 C++,函数名称甚至可以使用 abi::__cxa_demangle() 进行分解。

我的问题是:当这些信号出现时,还有哪些其他 C/C++ API 可以为我们提供更多有用的信息来记录以便事后调试?或者回溯是唯一“性感”的事情吗?

Working on some linux (Ubuntu) systems, running some in-house C and C++ apps (gcc).

There is a long list of signals which are handled, such as SIGSEGV and SIGINT. On signal, the callstack is obtained using backtrace(3) and backgrace_symbols(3). For C++ the function names are even demangled with abi::__cxa_demangle().

My question is: when these signals come up, what other C/C++ API is there which would give us more useful information to log for debugging after-the-fact? Or is the backtrace the only 'sexy' thing to do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故事和酒 2024-10-06 01:48:48

您可能想要启用核心转储...ulimit -c unlimited 或类似的。然后你可以将核心文件加载到GDB中,看看程序发生了什么。

You may want to enable core dumps... ulimit -c unlimited or similar. Then you can load the core file into GDB and see what happened to the program.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文