linux用gcc 編譯預設生成release版本,release是發行版本,debug是開發版本,debug版本生成的可執行檔案比release版本要大一些,裡面生成了一些debug_*段,可用於除錯,debug_*段是在編譯階段加入的。
編譯:gcc -c main.c -g
2、除錯物件:debug 版本的可執行檔案
3、開始除錯 輸入指令 gdb main
4、加斷點:
l顯示main函式所在檔案的原始碼
b 檔名:行數 給指定檔案指定行加斷點。
b 檔名:函式名 給函式有效的第一行加個斷點
b 行數 給指定行加斷點
b 16 if i==10 條件斷點
d bpnum 刪除指定斷點
disable bpnum 將斷點設定為無效
enable bpnum 將斷點設定為有效
5、執行
r 開始執行
n 執行下一步
s 執行下一條語句
c 執行到下乙個斷點處,直到程式結束或遇到斷點
6、 finish 退出函式,跳出函式
7、顯示
p 變數名 顯示變數的值
p & 變數名 顯示變數的位址
p *ptr 指標指向的位址儲存的值
p arr 顯示陣列所有元素
int *ptr = arr;
p *ptr@len,len是陣列元素個數,通過指向陣列的指標顯示陣列所有元素
p struct_val 顯示結構體變數所有成員值
p struct_val.a 顯示結構體變數中某個成員的值
p ptr_struct->a 顯示通過指標指向的結構體某個成員變數的值
p fun(a,b) 將函式測試執行
bt 顯示函式呼叫棧 函式呼叫流程
8、執行緒除錯
在多執行緒啟動之後,輸入info threads 列印出目前執行緒的資訊和編號。
輸入 t 1 切換到執行緒1
t 2 切換到執行緒2……
9、退出 q
Linux下gdb相關使用方法
目錄 一 進入除錯的方式 二 單執行緒下的gdb 三 多執行緒下的gdb 注1 gdb除錯值core檔案臨時生成,首先使用ulimit c檢視core檔案大小設定,並可用該命令更改大小設定,當為ulimit c unlimited時,core檔案大小沒有限制 注2 設定永久生成core檔案 修改檔案...
Linux下gdb的使用
一 編譯檔案生成可執行檔案 如果想用偵錯程式執行乙個可執行檔案,在用gcc編譯時必須加上 g選項。加上 g選項以後,gcc在編譯是會做以下額外的操作 1.建立符號表,符號表包含了程式中使用的變數名稱的列表。2.關閉所有的優化機制,以便程式執行過程中嚴格按照原來的c 進行。二 ulimit c unl...
linux下gdb的除錯使用
1.gdb除錯的物件是可執行檔案,而不是程式的源 因此在使用gcc編譯器時 需加 g選項。告訴gcc編譯器加入除錯資訊。例如 gcc g test.c o test 2.除錯gdb的格式是 例如 gdb test 3.在啟動gdb後,會顯示一段版權說明,如果要不顯示 加入 q即可 例如 gdb q ...