今天看了一遍关于linux 下应用程序fault handler的视频教程,主要内容是如何写一个应用程序信号处理程序。涉及信号安全和线程安全调用。
具体的做法是:
1. 注册信号处理函数,定义捕获哪些信号。
2. 信号处理函数中,打印 siginfo_t 和 context信息。
3. 利用glibc提供的backtrace函数,打印backtrace。
在实现第3点时,特别注意backtrace_symbols()等函数,尤其在发生段错误时,用此函数打印backtrace可能不正确,因为需要分配内存,而出错时整个内存调用链都不可靠了,有可能引发更严重的错误。需要调用backtrace_symbols_fd()来实现。
解决方案是:
单起一个进程或者线程,用于收集信号处理函数传递过来的消息。
|
文件: |
libcrash-100tar.bz2 |
大小: |
10KB |
下载: |
下载 | |
阅读(1564) | 评论(0) | 转发(0) |