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、示例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章