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浏览量
13369 -
程序调试
+关注
关注
6文章
14浏览量
9806
发布评论请先 登录
相关推荐
评论