2.1 啟動調試
在程序開始調試之前,要確保程序在gcc、g++編譯時,有如下-g的添加調試信息的選項
gcc -g test.c -o test
1、啟動未運行的程序
啟動未運行的程序,只需要在對應程序目錄中使用下面的命令
gdb test
2、調試已經(jīng)開始運行的程序進程
調試已經(jīng)開始運行的程序進程,首先先用top命令查看運行的程序進程的pid如下:
比如我要加載的程序qemu-system-x86的pid為269427,則用下面的命令將進程附加到GDB調試
gdb attach 269427#gdb attach [進程號]
或者先打開gdb,在gdb中輸入attach 269427也可以。效果如下
此時程序是處于暫停狀態(tài)的,用下面的命令讓程序繼續(xù)運行
#前面是縮寫,#后是全寫,兩者皆可
(gdb) c#continue
效果如下:
2.2 斷點管理
添加斷點
?方法一
#源程序只有一個文件
b [行號]#break [行號]
?方法二
#源程序多個個文件
b [文件名.c]:[行號]#break [文件名.c]:[行號]
添加斷點后如下所示:
查看所有斷點
info b#info break
效果如下:
我們可以看到所有的斷點還有斷點的編號
刪除斷點
delete#刪除所有斷點
delete [斷點編號]#刪除指定斷點
2.3 中斷調試執(zhí)行
s#step 單步執(zhí)行,進入函數(shù)調用
n#next 逐行執(zhí)行當前線程的代碼,不進入函數(shù)調用
c#continue 執(zhí)行代碼到下一個斷點
f#finish 執(zhí)行完當前函數(shù)并跳出
ignore [斷點號] [次數(shù)]#設置或修改運行時斷點的忽略計數(shù)
2.4 運行參數(shù)監(jiān)控
p [變量名]#print [變量名] 輸出該變量的值
display [變量名]#調試運行的每一步自動輸出該變量的值
bt#顯示當前的函數(shù)調用堆棧情況
list [行數(shù)]#顯示當前執(zhí)行的代碼,默認10行
watch [變量名]#設置變量監(jiān)視點,在變量值改變時暫停程序。
info breakpoints#顯示當前已設置的斷點列表。
info watchpoints#顯示當前已設置的監(jiān)視點(觀察點)列表。
info functions#顯示程序中定義的所有函數(shù)列表。
info variables#顯示程序中定義的所有全局變量和靜態(tài)變量列表。
info locals#顯示當前函數(shù)的局部變量信息。
info args#顯示當前函數(shù)的參數(shù)信息。
info threads#顯示當前正在運行的所有線程信息。
info registers#顯示當前線程的寄存器值。
info frame#顯示當前的調用幀信息。
info sharedlibrary#顯示加載的共享庫信息。
info inferior#顯示當前程序的執(zhí)行狀態(tài)信息。
info record#顯示反復執(zhí)行的命令數(shù)量。
info breakpoints location < address >#顯示指定地址上設置的斷點信息。
info break
2.5 多線程調試
info thread#命令查看當前線程的信息
info threads#命令查看當前所有線程
frame [棧幀號] #命令切換到指定的棧幀
thread [線程號]#切換到指定線程
-
程序
+關注
關注
117文章
3832瀏覽量
84356 -
調試工具
+關注
關注
1文章
53瀏覽量
12896 -
gdb
+關注
關注
0文章
61瀏覽量
13766
發(fā)布評論請先 登錄
請問如何建立開發(fā)環(huán)境
VIM編輯器怎么實現(xiàn)對嵌入式軟件的調試功能?
VIM中怎么實現(xiàn)嵌入式軟件調試?
如何搭建嵌入式Linux的GDB調試環(huán)境
基于Windows的ARM GCC開發(fā)環(huán) 境
N32G031系列GCC開發(fā)環(huán)境應用筆記分享
嵌入式Linux和嵌入式Linux開發(fā)環(huán)境

如何在VIM中對嵌入式軟件進行調試

初學GDB調試工具需要注意的事項

STM32CubeIDE乃ST官方提供的免費且功能強大的集成開發(fā)工具

Linux嵌入式 gdb VSCode圖形化調試教程

評論