两只袜子 发表于 2024-11-19 12:14

嵌入式Linux的GDB调试与常用命令

1、GDB的部署 建立gdb调试链接过程:
1、主机启动gdb,目标板启动服务器gdbserver。2、同时注意所调试程序编译选项需要带-g选项增加调试信息,并且主机和目标板上的调试程序需保持一致。3、开发板运行 : "gdbserver 主机IP:端口 ./被调试的程序"。4、在ubuntu主机上运行gdb:"arm-none-linux-gdb 被调试程序"。
5、在ubuntu主机中开始使用gdb连接开发板:" target remote 开发板IP:端口",这样便进入了gdb调试状态,然后在ubuntu主机上输入对应的gdb命令便可调试程序了。
2、GDB常用命令   以下是15个常用的GDB调试命令,有效地进行调试:
[*]gdb <program>
启动GDB并加载指定的可执行文件。
[*]run(或r)
启动程序的执行。可以带参数,例如run arg1 arg2。
[*]break <location>(或b <location>)
在指定位置设置一个断点。位置可以是行号、函数名或文件名+行号,例如break main或b 25。
[*]continue(或c)
从当前断点处继续执行程序,直到下一个断点或程序结束。
[*]step(或s)
单步执行程序,进入函数内部。
[*]next(或n)
单步执行程序,但不进入函数,直接执行到下一行。
[*]finish
继续执行当前函数直到返回,并显示返回值。
[*]print <expression>(或p <expression>)
打印指定表达式的值。例如,print x会显示变量x的当前值。
[*]display <expression>
每次程序停止时自动显示指定表达式的值。可以用来监控变量的变化。
[*]backtrace(或bt)
显示当前调用栈的信息,帮助分析程序的执行路径。
[*]list(或l)
显示当前执行的源代码位置附近的代码行。
[*]watch <expression>
设置观察点,当表达式的值发生变化时暂停程序。
[*]info breakpoints
显示当前设置的所有断点的信息。
[*]delete <breakpoint_number>
删除指定的断点。例如,delete 1会删除编号为1的断点。
[*]quit(或q)
退出GDB。
3、重要的调试命令   1. aw (Access Watchpoint)
[*]命令: aw <location>
[*]用途: 设置一个访问观察点,当程序读取或写入指定位置的内存时,程序将会停止。
[*]参数:

[*]<location>: 可以是变量名、内存地址或表达式,例如 aw myVar 或 aw *0x12345678。
[*]示例:
aw myVariable
这将会在 myVariable 被读取或修改时停止程序。

2. rw (Read Watchpoint)
[*]命令: rw <location>
[*]用途: 设置一个只读观察点,当程序尝试读取指定位置的内存时,程序将会停止。如果该位置被写入,不会触发停止。
[*]参数:

[*]<location>: 可以是变量名、内存地址或表达式,例如 rw myVar 或 rw *0x12345678。
[*]示例:
rw myVariable
这将会在 myVariable 被读取时停止程序,但在被修改时不会停止。

3.until 命令用于让程序继续执行直到当前堆栈帧返回或者到达一个特定的源代码行。这通常用于在调试时快速跳过一些不相关的代码块,直接运行到下一个重要的代码位置。until 命令的用法:
[*]命令: until
[*]语法:

[*]until:不带参数时,将执行直到当前函数返回。
[*]until <location>:可以指定一个源代码位置(行号)或地址,程序将继续执行直到到达该位置。

szt1993 发表于 2024-11-20 10:03

GDB调试很实用的一个功能
页: [1]
查看完整版本: 嵌入式Linux的GDB调试与常用命令