gdb调试
查看内存
-
x/<n/f/u> <addr>
n ,f ,u
是可选的参数, addr 表示需要查看的内存的地址。n
是一个正整数,表示显示内存的长度f
表示显示的格式,以二进制或十六进制来存储。u
表示以多少个字节将一个值取出来,gdb默认是4个字节
-
f 可供选择的参数
x
按照十六进制格式d
按照十进制格式u
按照十六进制显示无符号整形o
按照八进制格式t
按照二进制格式显示a
按照十六进制格式显示f
按照浮点数格式显示
-
u
可供选择的参数b
表示单字节h
表示双字节w
表示四字节g
表示八字节
(gdb) p &frame
$4 = (CanMsg *) 0x7fffeed84c50
(gdb) x/4tb 0x7fffeed84c50
0x7fffeed84c50: 00000001 00000001 00000000 00000000
(gdb) x/10tb 0x7fffeed84c50
0x7fffeed84c50: 00000001 00000001 00000000 00000000 00000111 00000000 10001001 00100000
0x7fffeed84c58: 00001001 10010010
(gdb) x/13tb 0x7fffeed84c50
0x7fffeed84c50: 00000001 00000001 00000000 00000000 00000111 00000000 10001001 00100000
0x7fffeed84c58: 00001001 10010010 00100000 00001001 00000000
ARM开发板上gdbserver调试
- 将编译好的
gdbserver
移植到开发板的/bin
目录下。 - 运行
arm-imx6ul-linux-gnueabihf-gdbserver 10.10.75.73:5000 main
,10.10.75.73
是编译服务器的ip
,5000
是端口号。 - 编译服务器上运行
arm-imx6ul-linux-gnueabihf-gdb main
然后运行target remote 10.10.112.158:5000
layout使用方法
layout:用于分割窗口,可以一边查看代码,一边测试。主要有以下几种用法:
layout src:显示源代码窗口
layout asm:显示汇编窗口
layout regs:显示源代码/汇编和寄存器窗口
layout split:显示源代码和汇编窗口
layout next:显示下一个layout
layout prev:显示上一个layout
Ctrl + L:刷新窗口
Ctrl + x,再按1:单窗口模式,显示一个窗口
Ctrl + x,再按2:双窗口模式,显示两个窗口
Ctrl + x,再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。
threads 调试
- gdb中设置
set non-stop on
表示线程被打断时,其他线程还在运行 - 通过ps可以查看进程PID,通过
ps -T
查看进程中的线程 - gdb界面中使用
info threads
, 查看线程数量。thread + 线程id
来切换线程