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除錯編譯除錯
- gdb除錯除錯
- C語言——設計printf除錯巨集C語言除錯
- c 語言除錯方法(除錯 PHP 底層、擴充套件)除錯PHP套件
- c/c++ gdb 除錯帶引數的程式C++除錯
- GDB除錯指令除錯
- golang語言除錯Golang除錯
- GDB 除錯程式碼除錯
- gdb除錯多程序除錯
- gdb除錯總結除錯
- gdb除錯快速上手除錯
- Linux核心使用gdb除錯Linux除錯
- 介紹 GDB 除錯 Go除錯Go
- 用GDB除錯程式(六)除錯
- GDB除錯使用記錄除錯
- GDB除錯命令詳解除錯
- gdb高階除錯命令高階除錯
- gdb除錯coredump檔案除錯
- gdb除錯傳入引數除錯
- Linux中使用GDB除錯程式Linux除錯
- gdb除錯正在執行的程式除錯
- GDB除錯基礎使用方法除錯
- NASM 與 GDB 簡易除錯指南ASM除錯
- OpenHarmony系統使用gdb除錯init除錯
- Linux—gdb除錯簡單實現Linux除錯
- [docker+gdb] 除錯 PHP 原始碼,看 strval 函式 C 實現Docker除錯PHP原始碼函式
- GO語言————6.10 使用閉包除錯Go除錯
- Go 語言開發除錯中階Go除錯
- gdb除錯core dump檔案之二除錯
- GDB除錯-從入門到實踐除錯
- 使用GDB除錯Android Native 層程式碼除錯Android
- 嵌入式GDB除錯Linux C程式或交叉編譯(開發板)除錯LinuxC程式編譯
- 16.C語言錯題整理C語言
- 在MacOS上使用gdb(cgdb)除錯Golang程式Mac除錯Golang
- gdb多執行緒多程序除錯命令執行緒除錯
- AVL樹(查詢、插入、刪除)——C語言C語言
- 4- C語言常見錯誤C語言
- 除錯Go語言的核心轉儲(Core Dumps)除錯Go