應用程式除錯工具gdb學習使用
一、gdb簡介
gdb 是 gnu 發布的一款功能強大的程式除錯工具。gdb 主要完成下面三個方面的功能:
1、啟動被除錯程式。
2、讓被除錯的程式在指定的位置停住。
3、當程式被停住時,可以檢查程式狀態(如變數值)。
1.1gdb使用流程
1.編譯生成可執行檔案:
gcc –g tst.c -o tst
2.啟動 gdb
gdb tst(檔名)
3. 在 main 函式處設定斷點
break main
4. 執行程式
run5. 利用更加豐富的 gdb 命令對程式進行除錯。
1.2gdb命令
1.list(l) 檢視程式
2.break(b) 函式名 在某函式入口處新增斷點
3.break(b) 行號 在指定行新增斷點
4.break(b) 檔名:行號 在指定檔案的指定行新增斷點
5. info break 檢視所有設定的斷點
6. delete 斷點編號刪除斷點
7.next(n) 單步執行程式(不進入子函式)
8.step(s) 單步執行程式(進入子函式)
9.continue(c) 繼續執行程式知道下乙個斷電
10.print(p) 變數名 檢視指定變數值
11. set var=value 設定變數的值
12.quit(q) 退出 gdb
二、使用coredump解決segment fault(段錯誤)
有的程式可以通過編譯, 但在執行時會出現segment fault(段錯誤). 這通常都是指標錯誤引起的.但這不像編譯錯誤一樣會提示到檔案->行,而是沒有任何資訊, 使得我們的除錯變得困難起來.
有一種辦法是, 我們用gdb的step, 一步一步尋找.這放在短小的**中是可行的。但如果程式**數量比較龐大,我們就得使用另一種辦法了。這時linux系統可以把程式出錯時的記憶體內容儲存在乙個core檔案中, 這種過程叫core dump。
2.1 core dump要解決的問題---->段錯誤 segment fault
linux應用程式在執行過程中,經常會遇到segment fault(段錯誤) 這樣的錯誤。產生這樣錯誤的原因通常有:
1. 陣列訪問越界
2. 訪問空指標
3. 棧溢位
4. 修改唯讀記憶體
2.2 core dump-使能
在linux系統中,預設是關閉core dump功能的,但是可以通過來ulimit命令開啟/關閉core dump功能。
開啟:ulimit -c unlimited
關閉:ulimit -c 0
2.3 core檔案分析
發生core dump之後, 可以使用gdb進行檢視core檔案的內容, 以定位程式出錯的位置.
用法:gdb 程式名 core檔名
例: gdb ./test core.12551
在進入gdb後, 用bt命令檢視backtrace以檢查發生程式執行到**, 來定位core dump的檔案->行.
2.4使用gdb+core+file找出程式中的錯誤
linux應用程式位址布局,王明學learn
linux應用程式位址布局 在學習linux應用程式開發時,經常會遇到如下概念 段 資料段 bss段 block started by symbol,又名 未初始化資料段 堆 heap 和棧 stack 而這些部分也是構成linux應用程式的重要組成部分。一 記憶體布局 2.堆向高記憶體位址生長 3...
使用gdb除錯應用程式
toc gdb是乙個由gnu開源組織發布的 unix linux作業系統下的 基於命令列的 功能強大的程式除錯工具。對於一名linux下工作的c 程式設計師,gdb是必不可少的工具 對於c c 程式,編譯的時候需要加上 g引數生成除錯資訊。如 gcc g hello.c o hello 啟動gdb後...
使用gdb除錯應用程式
目錄 gdb是乙個由gnu開源組織發布的 unix linux作業系統下的 基於命令列的 功能強大的程式除錯工具。對於一名linux下工作的c 程式設計師,gdb是必不可少的工具 對於c c 程式,編譯的時候需要加上 g引數生成除錯資訊。如 gcc g hello.c o hello 啟動gdb後,...