1 演示程序創建與編譯
在 Ubuntu 工作目錄下執行如下命令,新建一個 GDB 調試演示程序。
Host# mkdir demo
Host# cd demo/
Host# vi demo.c
![wKgZomW4TM6AVbMYAACNpGdUnX4262.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TM6AVbMYAACNpGdUnX4262.png)
#include
void show() {
printf("shown");
}
int main(int argc, char *argv[])
{
int arr[4] = {1, 2, 3, 4};
int i = 0;
for (i = 0; i < 4; i++) {
printf("arr[%d]: %dn", i, arr[i]);
}
show();
return 0;
}
執行如下命令,進行程序編譯,編譯完成將會生成 demo 可執行程序。
備注:編譯時需添加-g 參數,生成的可執行文件才帶有調試信息。
Host# export PATH=/home/tronlong/T507/LinuxSDK/out/t507/tlt507-evm/longan/buildro
ot/host/bin:$PATH
Host# aarch64-linux-gnu-gcc -g demo.c -o demo
![wKgaomW4TO6ACIFvAABQsG2DKAo909.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4TO6ACIFvAABQsG2DKAo909.png)
評估板與 PC 機連接至同一個路由器后進行上電,將編譯后的可執行文件 demo 拷貝
至評估板文件系統任意目錄下。
Target#
ls
![wKgZomW4TPOAYlSvAAAQn4AFhLI438.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TPOAYlSvAAAQn4AFhLI438.png)
2 調試程序運行
執行如下命令,查看虛擬機的 IP 地址。
Host# ifconfi
![wKgZomW4TQuAR0cRAACmYvPJpRE597.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TQuAR0cRAACmYvPJpRE597.png)
在評估板文件系統 demo 文件所在路徑下,執行如下命令運行 gdbserver 程序,開啟
監聽。
備注:192.168.13.11 為虛擬機的 IP 地址;1234 為連接的端口號(自行設置);demo 為
將要進行調試的程序。
Target#
gdbserver 192.168.13.11:1234 demo
![wKgZomW4TSOASuDsAAAg_CCa2EU120.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TSOASuDsAAAg_CCa2EU120.png)
在虛擬機 demo 文件所在路徑下,執行如下命令運行 GDB 調試程序。
Host# aarch64-linux-gnu-gdb demo
![wKgZomW4TSmAfxnzAADPLE94amo256.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TSmAfxnzAADPLE94amo256.png)
執行如下命令,連接評估板。192.168.13.66 為評估板的 IP 地址,請以實際情況為準。
(gdb)
target remote 192.168.13.66:1234
![wKgaomW4Ta6ASy4GAABr3cGlMUM859.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4Ta6ASy4GAABr3cGlMUM859.png)
同時,串口調試終端顯示連接成功的相關信息。
![wKgaomW4Tb2ADvbHAAArVwk99dI086.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4Tb2ADvbHAAArVwk99dI086.png)
3 程序調試
本章節主要演示 GDB 調試的幾個常用命令的使用方法。
3.1 list 命令
用于列出源碼,簡寫:l。
![wKgZomW4TcSAOE-XAAA4wu97lNI728.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TcSAOE-XAAA4wu97lNI728.png)
3.2 break 命令
用于設置斷點,簡寫:b。
分別在 main 函數和第 11 行設置斷點。
![wKgaomW4TcyAc7zXAAAgzf-Bx9w262.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4TcyAc7zXAAAgzf-Bx9w262.png)
3.3 info breakpoints 命令
用于顯示斷點的狀態,簡寫:info b。
![wKgZomW4TeWACC-GAAAptHD3tnc524.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TeWACC-GAAAptHD3tnc524.png)
3.4 continue 命令
用于恢復程序執行,簡寫:c。此命令使 GDB 恢復程序的執行,直至斷點觸發或程序
結束。
![wKgaomW4TeuALu-8AADX6RYM6l8991.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4TeuALu-8AADX6RYM6l8991.png)
以上調試過程在第二個斷點中,每輸入一次 c 命令,將會依次打印 arr[]數組的元素值,
然后程序執行結束。同時,串口調試終端打印相關信息。
![wKgaomW4Tg6ANg34AAA7uIWUYlI800.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4Tg6ANg34AAA7uIWUYlI800.png)
3.5 print 命令
用于打印變量或者變量地址,簡寫:p。
設置斷點后,可依次打印當前變量 i 的值。
![wKgaomW4TheAdCJ2AAD-jcIPRQ4894.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4TheAdCJ2AAD-jcIPRQ4894.png)
以上調試過程在每處斷點中,使用 print 命令打印變量 i 的值。同時,串口調試終端
打印相關信息。
![wKgaomW4TiuAZ_MpAAA6VmnytD0335.png](https://file1.elecfans.com/web2/M00/BF/CB/wKgaomW4TiuAZ_MpAAA6VmnytD0335.png)
3.6 quit 命令
退出 GDB 模式,簡寫:q。當程序調試完成后,使用 quit 命令退出 GDB 調試。
![wKgZomW4TjGAApr8AAAetKL0gIU718.png](https://file1.elecfans.com/web2/M00/BE/DF/wKgZomW4TjGAApr8AAAetKL0gIU718.png)
審核編輯 黃宇
-
gdb
+關注
關注
0文章
60瀏覽量
13346 -
程序調試
+關注
關注
6文章
14瀏覽量
9798
發布評論請先 登錄
相關推薦
評論