Linux C 和 C++:在处理 SIGSEGV 等信号时,我还应该记录什么?
在一些 Linux (Ubuntu) 系统上工作,运行一些内部 C 和 C++ 应用程序 (gcc)。
要处理的信号有一长串,例如 SIGSEGV
和 SIGINT
。在收到信号时,使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能想要启用核心转储...
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.