Linux下SegmentFault(double free)分析方法(六)backtrace

Linux下SegmentFault(double free)分析方法(六)backtrace

一、为什么用backtrce

在Linux下进行调试时经常会用程序的栈信息尤其是在程序异常终止时,通常我们可以通过gdb 或者coredump来当时的栈信息,但是有时由于某些限制比如说嵌入式板子上没有gdb工具,或者某些嵌入式的板子上空间不足,不足以生成coredump文件,那这种情况下我们就需要在程序中获取到相关的栈信息,尤其是当程序异常终止的时候,通过利用Linux下的信号来获取当时的栈信息,并且保存下来,这对于事后对bug进行定位分析非常有用。

二、如何获取当时的栈信息

由于平台的差异,不同的平台获取栈信息的方式也不尽相同,本文就主要介绍 x86 和 arm 平台,知识水平有限难免有纰漏,说错勿怪。

1、x86

在x86平台下,利用glibc中的backtrace函数,有关backtrace的资料:

root@ubuntu:/Deepinfar/IIIA/SegmentFault/6.back_trace# man backtrace
BACKTRACE(3)                                        Linux Programmer's Manual                                       BACKTRACE(3)

NAME
       backtrace, backtrace_symbols, backtrace_symbols_fd - support for application self-debugging

SYNOPSIS
       #include <execinfo.h>

       int backtrace(void **buffer, int size);

       char **backtrace_symbols(void *const *buffer, int size);

       void backtrace_symbols_fd(void *const *buffer, int size, int fd);

man手册有具体的例子可以参考一下使用。此外网页版的man手册:http://www.man7.org/linux/man-pages/man3/backtrace.3.html

2、arm

暂时先不写
可以尝试用backtrace 不行再去参考别的方法

三、实例

1、在程序终止时接受信号,打印信号的信息。
2、示例
发布了67 篇原创文章 · 获赞 15 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/wanxuexiang/article/details/88382793