dmesg + addr2line查看堆棧錯誤位置

Linux dmesg命令用於顯示開機信息。

kernel會將開機信息存儲在ring buffer中。您若是開機時來不及查看信息,可利用dmesg來查看。開機信息亦保存在/var/log目錄中,名稱爲dmesg的文件裏。

語法

dmesg [-cn][-s <緩衝區大小>]

參數說明

  • -c  顯示信息後,清除ring buffer中的內容。
  • -s<緩衝區大小>  預設置爲8196,剛好等於ring buffer的大小。
  • -n  設置記錄信息的層級。

dmesg + addr2line 查看core dump之後出錯堆棧的地址:

首先先產生一個錯誤,代碼如下:

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     char *str = NULL;
 6 
 7     *str = 0;
 8 
 9     return 0;
10 }

編譯代碼並執行:

gcc -g main.c  // 編譯的時候要加-g,添加調試信息
./a.out

出現以下錯誤:

Segmentation fault

使用dmesg查看錯誤堆棧地址:

 # dmesg | grep a.out
    [87995.723791] a.out[9405]: segfault at 0 ip 00000000004004dd sp 00007fff994faa90 error 6 in a.out[400000+1000]

使用addr2line查找問題出處:

# addr2line -e a.out 00000000004004dd   // -e 指定執行程序文件
/root/misc/main.c:7  // 說明問題出自main.c文件中的第7行

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章