C語言——gdb除錯
一、gdb基礎
前提:在gcc編譯時,要輸入-g選項;
步驟:
1.gdb進入GDB除錯模式
2.file 可執行檔名
3.pwd顯示當前目錄
4.l列出原始碼(前提是編譯時選擇了-g選項)
5.b 行號:設定斷點;
tb 行號 :設定臨時性斷點,與斷點不同,臨時斷點只在第一次執行時起作用
6.r:開始執行
單步執行:n(TIPs1:可以按回車重複上一次操作,在單步除錯時這個feature很有用)。
單步進入:s
繼續執行:c(走到下一個斷點處)
7.bt:檢視當前函式執行的堆疊
8.info 引數:檢視相關的資訊:例如:info break,info watchpoints
9.watch 變數名:檢視變數值
10.finish :退出當前函式
11.quit:退出除錯
12.delete breakpoints 2:刪除第二個斷點
13.disable/enable breakpoints 3 :禁用/啟用第三個斷點
14.frame:顯示當前棧及其變數core dump:Coredump叫做核心轉儲,它是程式執行時在突然崩潰的那一刻的一個記憶體快照。作業系統在程式發生異常而異常在程式內部又沒有被捕獲的情況下,會把程式此刻記憶體、暫存器狀態、執行堆疊等資訊轉儲儲存在一個檔案裡。
二、開啟core dump模式:
1.在shell命令列設定:ulimit -c unlimited
2.自定義core檔案的命名格式:echo ./core_%e_%t_%p > /proc/sys/kernel/core_pattern
3.進入core檔案除錯:gdb 程式名 core檔名
三、文章分享
以下內容為轉載:
/**********************************************************************************
gcc -g main.c //在目標檔案加入原始碼的資訊
gdb a.out
(gdb) start //開始除錯
(gdb) n //一條一條執行
(gdb) step/s //執行下一條,如果函式進入函式
(gdb) backtrace/bt //檢視函式呼叫棧幀
(gdb) info/i locals //檢視當前棧幀區域性變數
(gdb) frame/f //選擇棧幀,再檢視區域性變數
(gdb) print/p //列印變數的值
(gdb) finish //執行到當前函式返回
(gdb) set var sum=0 //修改變數值
(gdb) list/l 行號或函式名 //列出原始碼
(gdb) display/undisplay sum //每次停下顯示變數的值/取消跟蹤
(gdb) break/b 行號或函式名 //設定斷點
(gdb) continue/c //連續執行
(gdb) info/i breakpoints //檢視已經設定的斷點
(gdb) delete breakpoints 2 //刪除某個斷點
(gdb) disable/enable breakpoints 3 //禁用/啟用某個斷點
(gdb) break 9 if sum != 0 //滿足條件才啟用斷點
(gdb) run/r //重新從程式開頭連續執行
(gdb) watch input[4] //設定觀察點
(gdb) info/i watchpoints //檢視設定的觀察點
(gdb) x/7b input //列印儲存器內容,b--每個位元組一組,7--7組
(gdb) disassemble //反彙編當前函式或指定函式
(gdb) si // 一條指令一條指令除錯 而 s 是一行一行程式碼
(gdb) info registers // 顯示所有暫存器的當前值
(gdb) x/20 $esp //檢視記憶體中開始的20個數
*********************************************************************************/
還有兩篇實操文:
https://www.cnblogs.com/life2refuel/p/5396538.html
core dump使用:
https://blog.csdn.net/sunxiaopengsun/article/details/72974548
相關文章
- C編譯: 使用gdb除錯編譯除錯
- C 編譯: 使用 gdb 除錯編譯除錯
- gdb除錯除錯
- 通過 GDB 學習 C 語言
- C語言——設計printf除錯巨集C語言除錯
- linux下用gdb除錯c程式Linux除錯C程式
- 使用GDB命令列偵錯程式除錯C/C++程式命令列除錯C++
- GDB除錯MySQL除錯MySql
- gdb除錯命令除錯
- GDB除錯指令除錯
- c 語言除錯方法(除錯 PHP 底層、擴充套件)除錯PHP套件
- c/c++ gdb 除錯帶引數的程式C++除錯
- 使用gdb和gdbserver除錯Android C/C++程式Server除錯AndroidC++
- golang語言除錯Golang除錯
- GDB 除錯程式碼除錯
- gdb除錯多程式除錯
- GDB除錯彙總除錯
- 用GDB除錯程式除錯
- GDB多程式除錯除錯
- gdb除錯快速上手除錯
- gdb除錯多程序除錯
- gdb除錯總結除錯
- Linux環境組合語言程式設計初步——使用gdb除錯程式(轉)Linux組合語言程式設計除錯
- 介紹 GDB 除錯 Go除錯Go
- GDB除錯命令詳解除錯
- 用GDB除錯程式(六)除錯
- GDB除錯使用記錄除錯
- Codeblocks和gdb除錯BloC除錯
- linux 下GDB除錯Linux除錯
- gdb高階除錯方法高階除錯
- 使用 gdb 工具除錯 Go除錯Go
- gdb除錯coredump檔案除錯
- gdb高階除錯命令高階除錯
- linux c之gdb常用斷點除錯總結Linux斷點除錯
- Go 語言 udpproxy 除錯工具GoUDP除錯
- Go 語言 WebSocket 除錯工具GoWeb除錯
- Linux核心使用gdb除錯Linux除錯
- GDB程式碼除錯與使用除錯