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 不行再去参考别的方法