gdb分析coredump

一、內核配置coredump輸出目錄

配置coredump的輸出格式以及路徑:
echo “/mnt/usb/coredump/core.%e.%p” > /proc/sys/kernel/core_pattern

二、編譯帶調試信息的二進制

一般而言,發佈的二進制文件不帶調試信息,需要修改Makefile增加 -g 選項。

三、gdb分析

1. 啓動gdb

arm-linux-gnueabihf-gdb

2.加載二進制

(gdb) file tee-supplicant
Reading symbols from tee-supplicant...done.

3.加載coredump文件

(gdb) core-file core.tee-supplicant.1488
[New LWP 1499]
[New LWP 1488]
warning: Could not load shared library symbols for 5 libraries, e.g. /usr/lib/libteec.so.1.0.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
Core was generated by `./tee-supplicant'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0xf6ed2790 in ?? ()
[Current thread is 1 (LWP 1499)]

4.查看並加載動態庫

查看缺少的動態庫:

(gdb) info sharedlibrary
From        To          Syms Read   Shared Object Library
                        No          /usr/lib/libteec.so.1.0
                        No          /lib/libpthread.so.0
                        No          /lib/libm.so.6
                        No          /lib/libc.so.6
                        No          /lib/ld-linux-armhf.so.3

設置動態庫路徑:

(gdb) set solib-search-path 動態庫路徑
如果存在多個路徑,動態庫路徑之間以冒號隔離。
在這裏插入圖片描述

5.查看發生異常時保存的堆棧信息

(gdb) where
在這裏插入圖片描述

6.跳轉到對應堆棧並查看變量

跳轉到堆棧0:

(gdb) f 0

跳轉到堆棧1:

(gdb) f 1

跳轉到堆棧2:

(gdb) f 2
通過跳轉到不同的堆棧,可以查看發生異常時的變量信息,例如:

跳轉到堆棧2 -> 查看傳入的待解析數據

(gdb) f 2
#2  0x0000cb8e in tty_read_thread () at src/tty.c:247
247                     if (tdNmeaExtract(tmp, rlen, &stTDData))   /* 提取完成 */
(gdb) p tmp
$1 = "$GPGSV,61,133,17,03,00,150,,07,68,215,25,08,35,046,,0*66\r\n9,M,-29.0,M,,*61\r\n05.787"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章