應用程式除錯工具gdb,王明學learn

2022-07-23 22:06:22 字數 1670 閱讀 6238

應用程式除錯工具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後,...