1 演示程序創(chuàng)建與編譯
在 Ubuntu 工作目錄下執(zhí)行如下命令,新建一個(gè) GDB 調(diào)試演示程序。
Host# mkdir demo
Host# cd demo/
Host# vi demo.c

#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;
}
執(zhí)行如下命令,進(jìn)行程序編譯,編譯完成將會(huì)生成 demo 可執(zhí)行程序。
備注:編譯時(shí)需添加-g 參數(shù),生成的可執(zhí)行文件才帶有調(diào)試信息。
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

評(píng)估板與 PC 機(jī)連接至同一個(gè)路由器后進(jìn)行上電,將編譯后的可執(zhí)行文件 demo 拷貝
至評(píng)估板文件系統(tǒng)任意目錄下。
Target#
ls

2 調(diào)試程序運(yùn)行
執(zhí)行如下命令,查看虛擬機(jī)的 IP 地址。
Host# ifconfi

在評(píng)估板文件系統(tǒng) demo 文件所在路徑下,執(zhí)行如下命令運(yùn)行 gdbserver 程序,開啟
監(jiān)聽。
備注:192.168.13.11 為虛擬機(jī)的 IP 地址;1234 為連接的端口號(hào)(自行設(shè)置);demo 為
將要進(jìn)行調(diào)試的程序。
Target#
gdbserver 192.168.13.11:1234 demo

在虛擬機(jī) demo 文件所在路徑下,執(zhí)行如下命令運(yùn)行 GDB 調(diào)試程序。
Host# aarch64-linux-gnu-gdb demo

執(zhí)行如下命令,連接評(píng)估板。192.168.13.66 為評(píng)估板的 IP 地址,請(qǐng)以實(shí)際情況為準(zhǔn)。
(gdb)
target remote 192.168.13.66:1234

同時(shí),串口調(diào)試終端顯示連接成功的相關(guān)信息。

3 程序調(diào)試
本章節(jié)主要演示 GDB 調(diào)試的幾個(gè)常用命令的使用方法。
3.1 list 命令
用于列出源碼,簡寫:l。

3.2 break 命令
用于設(shè)置斷點(diǎn),簡寫:b。
分別在 main 函數(shù)和第 11 行設(shè)置斷點(diǎn)。

3.3 info breakpoints 命令
用于顯示斷點(diǎn)的狀態(tài),簡寫:info b。

3.4 continue 命令
用于恢復(fù)程序執(zhí)行,簡寫:c。此命令使 GDB 恢復(fù)程序的執(zhí)行,直至斷點(diǎn)觸發(fā)或程序
結(jié)束。

以上調(diào)試過程在第二個(gè)斷點(diǎn)中,每輸入一次 c 命令,將會(huì)依次打印 arr[]數(shù)組的元素值,
然后程序執(zhí)行結(jié)束。同時(shí),串口調(diào)試終端打印相關(guān)信息。

3.5 print 命令
用于打印變量或者變量地址,簡寫:p。
設(shè)置斷點(diǎn)后,可依次打印當(dāng)前變量 i 的值。

以上調(diào)試過程在每處斷點(diǎn)中,使用 print 命令打印變量 i 的值。同時(shí),串口調(diào)試終端
打印相關(guān)信息。

3.6 quit 命令
退出 GDB 模式,簡寫:q。當(dāng)程序調(diào)試完成后,使用 quit 命令退出 GDB 調(diào)試。

審核編輯 黃宇
-
gdb
+關(guān)注
關(guān)注
0文章
60瀏覽量
13551 -
程序調(diào)試
+關(guān)注
關(guān)注
6文章
14瀏覽量
9862
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論