段錯誤除錯

2021-07-24 08:02:49 字數 2167 閱讀 1903

1、gdb除錯

1)第一步是使用帶有除錯標誌(debugging flags)的方式編譯這段**,如下:

# gcc -g segfault.c

2)執行可執行程式

$:gdb a.out        //進入gdb模式
(gdb) run          //執行程式

starting program: /home/dgawd/cpsc/363/a.out

test string

program received signal sigsegv, segmentation fault.

0x4007fc13 in _io_getline_info () from /lib/libc.so.6

(gdb) backtrace               //檢視堆疊內容

#0 0x4007fc13 in _io_getline_info () from /lib/libc.so.6

#1 0x4007fb6c in _io_getline () from /lib/libc.so.6

#2 0x4007ef51 in fgets () from /lib/libc.so.6

#3 0x80484b2 in main (argc=1, argv=0xbffffaf4) at segfault.c:10

#4 0x40037f5c in __libc_start_main () from /lib/libc.so.6

(gdb) frame 3           //關注自己**問題,檢視3號堆疊幀內容

#3 0x80484b2 in main (argc=1, argv=0xbffffaf4) at segfault.c:10

10 fgets(buf, 1024, stdin)

(gdb) print buf         //列印buf中的內容$1 = 0x0                  //buf 為空指標

(gdb) 

kill //kill 當前程式而不退出gdb

kill the program being debugged? (y or n) y

(注意:不用使用quit直接退出gdb,這樣比較麻煩。直接kill掉當前的程式呼叫即可)

(gdb) break segfault.c:8         //在第8行設定斷點breakpoint 1 at 0x8048486: file segfault.c, line 8.

(gdb) run                       //再次執行程式starting program: /home/dgawd/cpsc/363/a.out 

breakpoint 1, main (argc=1, argv=0xbffffaf4) at segfault.c:8

8 buf = malloc(1<<31);

(gdb) next                    //單步除錯10        fgets(buf, 1024, stdin)

2、backtrace和backtrace_symbols

這兩個函式通過回溯的方式反映函式呼叫關係

1)這兩個函式能顯示正確結果的前提條件:

(1)編譯程式時,gcc的優化選項是0

(2)內聯函式沒有棧

2)makefile編寫注意事項

(1)編譯時選項為「-g - o0」                  cflags = -g -o0

(2)鏈結時選項為「-rdynamic」            ldflags = -rdynamic

段錯誤除錯

核心轉儲core dumped 概念 當 個程序要異常終止時,可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上,檔名通常是core,這叫做core dump。也叫核心轉儲,幫助開發者進行除錯,在程式崩潰時把記憶體資料dump到硬碟上,讓gdb識別 乙個程序允許產生多大的core檔案取決於程序的 ...

Linux段錯誤除錯

1.單步除錯 編譯時加上 g,然後用gdb除錯,自然就知道出現段錯誤的地方在哪。2.利用core檔案來進行除錯 用ulimit c來檢視core檔案的最大值,如果是0就不會產生core檔案。此時可用ulimit c 1000將core檔案的最大值設定為1000k。ulimit c 1000只會影響當...

gdb 除錯段錯誤

開發嵌入式linux的時候經常會遇到segmentation fault,也就是段異常錯誤,一般是使用錯誤的指標訪問記憶體導致。這種錯誤可以通過開啟核心的異常資訊輸出,再用gdb對發生段異常的位址進行定位。1.開啟核心的異常資訊輸出 mips的核心 關閉了arch mips mm fault.c的d...