在嵌入式开发领域,调试是保证程序稳定运行的关键一步。对于使用OKMX8MP-C开发板的开发者来说,掌握GDB远程调试技术可以显着提升开发效率。 GDB是The GNU Project Debugger的缩写,是Linux下的综合调试工具。 GDB支持多种调试方式,包括设置断点、单步执行、打印变量、观察变量、检查寄存器、查看调用堆栈。
在Linux环境软件开发中,GDB是用于调试C和C程序的主要调试工具。 OKMX8MP-C的5.4.70版本默认支持gdbserver,我们提供的开发环境也默认支持gdb。接下来详细介绍如何在OKMX8MP-C上进行GDB远程调试
forlinx@ubuntu:~$ $CC -g test_bug.c -o test_bug
该命令将编译 test_bug.c 源文件并生成包含调试信息的可执行文件 test_bug。这样GDB在后续的调试过程中就可以准确定位到源代码中对应的位置。
编译完成后,需要将生成的可执行文件复制到开发板上。这通常是通过串行端口、网络或其他文件传输方法来实现的。在本例中,我们假设test_bug文件已被复制到开发板上的/目录下。
设置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地址,这是远程调试的前提。
在虚拟机或主机上,使用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,准备开始远程调试。
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命令继续执行程序。程序会在断点处暂停,等待进一步的调试。
变量监控:使用watch命令监控变量变化。当变量的值发生变化时,GDB会自动暂停执行。
多线程调试:如果程序是多线程的,可以使用thread命令切换线程进行调试。
安全注意事项:在远程调试过程中,确保网络环境安全至关重要。使用SSH隧道或其他加密方法来保护调试数据传输。
OKMX8MP-C GDB远程调试技巧就这些了。这个强大的工具可以实现高效的问题解决和开发增强。
以上是OKMX-C GDB远程调试技巧的详细内容。更多信息请关注PHP中文网其他相关文章!