【米尔 NXP i.MX93 开发板评测】GDB调试
# GDB调试在调试应用程序时出了问题,需要在线调试,下面看看在设备端进行GDB调试的方法。
配置`buildroot`,生成目标设备`gdb`工具,打包生成文件系统下载到设备中。
```bash
Target packages
Debugging, profiling and benchmark
```
重新编译要调试的app,添加编译参数`-g`增加调试信息。下面以`buildroot`中的`libpjsip`为例进行说明。
`buildroot`默认情况下不带调试信息,找到`libpjsip`这个包的配置文件`libpjsip.mk`增加一行`LIBPJSIP_CFLAGS += -g`
重新编译`libpjsip`
```bash
make libpjsip-dirclean
make libpjsip-rebuild
```
将需要调试的应用程序下载到开发板,使用GDB进行调试。
```bash
gdb samples/aarch64-buildroot-linux-gnu/simpleua
(gdb) set args sip:bruce@192.168.1.228
(gdb) set print pretty on
(gdb) set listsize 20
(gdb) b main
(gdb) r
Starting program: /root/pjsip-apps/bin/samples/aarch64-buildroot-linux-gnu/simpleua sip:bruce@192.168.1.228
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
Breakpoint 1, main (argc=2, argv=0xffffc2490e08)
at ../src/samples/simpleua.c:225
225 {
(gdb) n
```
以上步骤操作说明:
1. 使用GDB加载应用程序,`gdb samples/aarch64-buildroot-linux-gnu/simpleua`
2. 设置几个参数:`args` 给应用的参数,`print pretty on` 格式化结构体(更方便查看变量),`set listsize 20` 设置一次显示的行数(默认10行)
3. 设置断点 `b main`
4. 运行:r
5. 发现程序在mian函数第一行停住,等待进一步操作指令。
运行过程中需要打印复杂结构体,比如这里的`local_sdp`指针变量
```
(gdb) p *local_sdp.media
```
所有变量都会显示出来
还可以继续深挖下去,通过这种方法能查看所有变量的值。
```bash
(gdb) p *local_sdp.media.attr
$9 = (pjmedia_sdp_attr *) 0xaaaac01b10c8
(gdb) p **local_sdp.media.attr
$10 = {
name = {
ptr = 0xffff949899f8 "rtcp",
slen = 4
},
value = {
ptr = 0xaaaac01b10e8 "4001 IN IP4 192.168.1.189",
slen = 25
}
}
(gdb)
```
经过上面的调试,终于找到应用程序API调用失败是因为缺少编码器。将`package/libpjsip/libpjsip.mk`中屏蔽的编码器都打开。再次测试`simpleua`程序呼叫成功。
<p>谢谢,分享在设备端进行GDB在线调试的方法</p>
页:
[1]