-
在PC端为gdb,在开发板上为gdbserver
-
交叉编译器中自带gdb工具,存放在arm-linu-gnueabihf目录下,需要移植到开发板上
-
在交叉编译时需要加上
-g
选项:
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g
GDB调试程序
将编译好的文件放到开发板中,确保调试过程中PC端(Ubuntu)可以和开发板网络通信
- 启动开发板上的gdbserver
gdbserver 192.168.1.253:2001 gdbtest
其中192.168.1.253为调试机的IP地址,即ubuntu的IP地址,2001是端口号(任意分配未使用端口)
- 启动ubuntu中的gdb调试工具
arm-linux-gdb gdbtest
终端信息:
- 连接开发板
target remote 192.168.1.251:2001
其中192.168.1.251为开发板的IP地址,2001是上面设置的端口号
开发板信息提示:
GDB命令
- 程序控制命令
run (r):启动被调试的程序。可以带参数启动,如run arg1 arg2。
continue (c):继续执行程序,直到遇到下一个断点或程序结束。
step (s):单步执行程序,如果当前行有函数调用,则进入该函数内部。
next (n):单步执行程序,但不会进入函数内部,即如果当前行有函数调用,会执行完该函数并停在下一行。
finish:执行当前函数中的剩余部分,直到函数返回。
kill:停止被调试的程序。
quit (q):退出GDB调试器。
- 断点管理命令
break (b):在指定位置设置断点。如break main在main函数的第一行设置断点,break file.c:10在file.c文件的第10行设置断点。
tbreak:设置临时断点,当程序第一次执行到该断点时自动删除。
info break (b):显示当前所有断点信息。
delete [Num]:删除编号为Num的断点,如果不指定Num,则删除所有断点。
enable/disable [Num]:启用/禁用编号为Num的断点。
- 查看信息命令
print (p):打印变量或表达式的值。如print x打印变量x的值。
info locals:显示当前函数的局部变量及其值。
info args:显示当前函数的参数及其值。
backtrace (bt):打印当前的函数调用栈信息。
where:显示当前执行的具体函数和代码行。
frame [n]:切换到第n个函数调用堆栈帧。
- 其他常用命令
watch:监视变量的值,当变量的值发生变化时停止执行。
ptype:打印类型的详细信息。
x:查看内存地址的内容,可以按不同格式(如十六进制、十进制等)显示。
set var:设置变量的值。如set var x = 10将变量x的值设置为10。
call:调用函数。可以在调试过程中调用程序中定义的函数。
list:显示源代码,可以指定行号或文件名来显示特定的代码段。
- 多线程和多进程调试
info threads:查看当前所有线程的信息。
thread [num]:切换到编号为num的线程进行调试。
attach [pid]:绑定到正在运行的进程进行调试。
info inferiors:显示当前所有被调试的进程信息。