首页 >后端开发 >C++ >OKMX-C GDB远程调试技巧

OKMX-C GDB远程调试技巧

DDD
DDD原创
2024-12-01 22:18:10208浏览

OKMX-C GDB Remote Debugging Skills

在嵌入式开发领域,调试是保证程序稳定运行的关键一步。对于使用OKMX8MP-C开发板的开发者来说,掌握GDB远程调试技术可以显着提升开发效率。 GDB是The GNU Project Debugger的缩写,是Linux下的综合调试工具。 GDB支持多种调试方式,包括设置断点、单步执行、打印变量、观察变量、检查寄存器、查看调用堆栈。

在Linux环境软件开发中,GDB是用于调试C和C程序的主要调试工具。 OKMX8MP-C的5.4.70版本默认支持gdbserver,我们提供的开发环境也默认支持gdb。接下来详细介绍如何在OKMX8MP-C上进行GDB远程调试

  1. 编译前的准备工作 在执行 GDB 调试之前,必须确保应用程序已正确编译并包含调试信息。这可以通过在编译期间添加 -g 选项来实现。例如:

forlinx@ubuntu:~$ $CC -g test_bug.c -o test_bug

该命令将编译 test_bug.c 源文件并生成包含调试信息的可执行文件 test_bug。这样GDB在后续的调试过程中就可以准确定位到源代码中对应的位置。

编译完成后,需要将生成的可执行文件复制到开发板上。这通常是通过串行端口、网络或其他文件传输方法来实现的。在本例中,我们假设test_bug文件已被复制到开发板上的/目录下。

  1. 开发板IP和启动gdbserver设置 接下来需要在开发板上设置IP地址并启动gdbserver服务。具体步骤如下:

设置IP地址:

使用ifconfig命令设置开发板的IP地址。例如:

ifconfig eth0 172.16.0.109

这里,开发板的IP地址设置为172.16.0.109

在开发板上启动gdbserver,指定监听端口号和要调试的程序。例如:

gdbserver 172.16.0.109:2345 /test_bug

此命令将启动 gdbserver 并在端口 2345 上侦听来自 GDB 客户端的连接请求。

root@OK8MP:~# ifconfig eth0 172.16.0.109
root@OK8MP:~# gdbserver 172.16.0.109:2345 test_bug
进程 /home/root/test_bug 创建; pid = 1356
监听端口 2345
在虚拟机或主机上设置与开发板同一网段的IP地址,并使用ping命令测试与开发板的连通性

确保能ping通开发板IP地址,这是远程调试的前提。

  1. 启动GDB客户端并连接开发板 启动GDB客户端:

在虚拟机或主机上,使用aarch64-poky-linux-gdb命令启动GDB客户端并指定要调试的程序。例如:

forlinx@ubuntu:~/ aarch64-poky-linux-gdb test_bug
GNU gdb (GDB) 8.3.1
版权所有 (C) 2019 自由软件基金会
许可证 GPLv3 :GNU GPL 版本 3 或更高版本 http://gnu.org/licenses/gpl.html
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。
输入“显示复制”和“显示保修”以了解详细信息。该 GDB 配置为“--host=x86_64-pokysdk-linux --target=aarch64-poky-linux”。
键入“显示配置”以获取配置详细信息。
有关错误报告说明,请参阅:
http://www.gnu.org/software/gdb/bugs/
在线查找 GDB 手册和其他文档资源:
http://www.gnu.org/software/gdb/documentation/
如需帮助,请输入“帮助”。
输入“apropos word”来搜索与“word”相关的命令...
从 test_bug 读取符号...
(gdb)
连接到开发板:

在GDB客户端中,使用target远程命令连接板子上的gdbserver。例如:

(gdb) 目标远程 172.16.0.109:2345
使用 172.16.0.109:2345 进行远程调试
从远程目标读取 /lib/ld-linux-aarch64.so.1...
警告:从远程目标传输文件可能会很慢。使用“set sysroot”来本地访问文件。
从远程目标读取 /lib/ld-linux-aarch64.so.1...
从目标读取符号:/lib/ld-linux-aarch64.so.1...
从远程目标读取 /lib/ld-2.30.so...
从远程目标读取 /lib/.debug/ld-2.30.so...
从远程目标读取 /lib/.debug/ld-2.30.so...
从目标读取符号:/lib/.debug/ld-2.30.so...
0x0000fffff7fcf080 in _start () from target:/lib/ld-linux-aarch64.so.1
(gdb)
至此,GDB客户端连接到板上的gdbserver,准备开始远程调试。

  1. 远程调试 连接成功后,就可以开始使用各种GDB调试命令进行远程调试了。以下是一些常用的调试命令:

l(列表):列出源代码。

b(中断):设置断点。

n(下一个):逐行执行代码。

s(步骤):进入函数以逐行执行。

c(继续):继续执行程序。

p(打印):打印变量的值。

例如使用l命令查看当前位置的源码:

(gdb) l
12 }
13
14 void A(int *p)
15 {
16 B(p);
17 }
18
19 void A2(int *p)
20 {
21 C(p);
(gdb)

然后,可以使用B命令在一行上设置断点,比如第16行:

bash复制代码

(gdb) b 16

断点 1 位于 0x...:文件 test_bug.c,第 16 行。

使用c命令继续执行程序。程序会在断点处暂停,等待进一步的调试。

  1. 调试技巧及注意事项 断点管理:适当设置断点可以显着提高调试效率。使用d命令删除断点。使用info b命令查看当前所有断点。

变量监控:使用watch命令监控变量变化。当变量的值发生变化时,GDB会自动暂停执行。

多线程调试:如果程序是多线程的,可以使用thread命令切换线程进行调试。

安全注意事项:在远程调试过程中,确保网络环境安全至关重要。使用SSH隧道或其他加密方法来保护调试数据传输。

OKMX8MP-C GDB远程调试技巧就这些了。这个强大的工具可以实现高效的问题解决和开发增强。

以上是OKMX-C GDB远程调试技巧的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn