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