远程调试:
提示:调试之前,确保PC端与linux开发板之间ping通。
提示:调试之前,确保PC端与linux开发板都具有GDB。
- 在目标板上设置将要连接的IP以及端口
#在目标板上输入
#192.168.100.100为PC端的IP,98为任意设定端口
gdbserver 192.168.100.100:98
- PC端启动GDB调试
#在PC端上输入
#app_exe要运行的应用程序
arm-linux-gdb app_exe
- 连接目标板进入调试状态
#在PC端启动GDB后,在(gdb)输入
#192.168.100.120为目标板IP,98为第一步中设定的端口
target remote 192.168.100.120:98
GDB调试指令:
常用GDB命令
启动程序:run [arguments] 或 r [arguments],运行程序,可带参数。
设置断点:break [function_name] 或 b line_number,在指定函数或行号处设置断点。
删除断点:delete breakpoints [number] 或 d [number],删除指定编号的断点。
单步执行:step 或 s,进入函数内部;next 或n,执行下一行而不进入函数。
查看变量/表达式值:print variable 或 p variable,显示变量或表达式的值。
查看源码:list 或 l,显示当前执行位置的源代码。
继续执行:continue 或 c,继续执行直到遇到下一个断点或程序结束。
查看堆栈信息:backtrace 或 bt,显示函数调用堆栈。
退出GDB:quit 或 q。
高级功能
条件断点:break [location] if condition,在满足条件时才触发断点。
观察点:watch variable,监视变量的更改。
线程调试:info threads 查看所有线程,thread [thread_number]切换到指定线程。
远程调试:结合gdbserver可以在目标机上运行程序,并在开发机上使用GDB进行调试。
详细指令说明
条件断点
break <location> if <condition>
:在特定位置设置一个条件断点,只有当<condition>
为真时才会触发断点。
查看和管理断点
info breakpoints [number]
或i b
:显示当前设置的所有断点信息,可以指定断点编号查看特定断点。disable [breakpoint_number]
:禁用指定编号的断点。enable [breakpoint_number]
:启用指定编号的断点。delete [breakpoint_number]
或d
:删除指定编号的断点,省略编号则删除所有断点。
堆栈操作
up [count]
:向上移动堆栈帧,进入调用它的函数的上下文。down [count]
:向下移动堆栈帧,回到调用者函数的上下文。frame [frame_number]
或f
:选择指定编号的堆栈帧为当前帧。
查看内存
x/nfu address
:显示内存内容,n
指定显示多少个单位,f
指定单位格式(如w
为word,b
为byte),u
指定显示格式(如x
为十六进制),address
是要查看的内存地址。
修改变量值
set variable var = value
:修改变量var
的值为value
。
执行程序到指定位置
until location
:运行程序直到到达指定位置或遇到断点。
跟踪内存
watch expression
:设置观察点,当expression
的值发生变化时停止执行。rwatch expression
:当expression
被读取时停止执行。awatch expression
:当expression
被读取或写入时停止执行。
信号处理
handle <signal> <action>
:设置接收到特定信号时GDB的行为,如pass
(传递给程序处理)、stop
(让GDB停止)、print
(打印信号信息但不停止)等。
线程和进程控制
info threads
或info inferiors
:显示当前所有线程或进程的信息。thread thread_num
或thread apply all command
:切换到指定线程或在所有线程上执行命令。
宏和记录
define macro_name
:定义一个宏。record
:开始记录执行历史,用于事后回放。reverse-next
或reverse-step
:在录制的执行历史中反向执行下一步或进入函数。
附加到进程
attach pid
:附加到正在运行的进程进行调试,pid
为目标进程的进程ID。detach
:从调试的进程分离,让进程继续独立运行。
汇编代码查看
disassemble [function]
或disas
:反汇编指定函数或当前指令的机器码。layout asm
:在GDB的TUI模式下显示源代码和汇编代码的并排视图。