GDB调试

远程调试:

提示:调试之前,确保PC端与linux开发板之间ping通。
提示:调试之前,确保PC端与linux开发板都具有GDB。

  1. 在目标板上设置将要连接的IP以及端口
#在目标板上输入
#192.168.100.100为PC端的IP,98为任意设定端口
gdbserver 192.168.100.100:98
  1. PC端启动GDB调试
#在PC端上输入
#app_exe要运行的应用程序
arm-linux-gdb app_exe
  1. 连接目标板进入调试状态
#在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进行调试。

详细指令说明

  1. 条件断点

    • break <location> if <condition>:在特定位置设置一个条件断点,只有当<condition>为真时才会触发断点。
  2. 查看和管理断点

    • info breakpoints [number]i b:显示当前设置的所有断点信息,可以指定断点编号查看特定断点。
    • disable [breakpoint_number]:禁用指定编号的断点。
    • enable [breakpoint_number]:启用指定编号的断点。
    • delete [breakpoint_number]d:删除指定编号的断点,省略编号则删除所有断点。
  3. 堆栈操作

    • up [count]:向上移动堆栈帧,进入调用它的函数的上下文。
    • down [count]:向下移动堆栈帧,回到调用者函数的上下文。
    • frame [frame_number]f:选择指定编号的堆栈帧为当前帧。
  4. 查看内存

    • x/nfu address:显示内存内容,n指定显示多少个单位,f指定单位格式(如w为word,b为byte),u指定显示格式(如x为十六进制),address是要查看的内存地址。
  5. 修改变量值

    • set variable var = value:修改变量var的值为value
  6. 执行程序到指定位置

    • until location:运行程序直到到达指定位置或遇到断点。
  7. 跟踪内存

    • watch expression:设置观察点,当expression的值发生变化时停止执行。
    • rwatch expression:当expression被读取时停止执行。
    • awatch expression:当expression被读取或写入时停止执行。
  8. 信号处理

    • handle <signal> <action>:设置接收到特定信号时GDB的行为,如pass(传递给程序处理)、stop(让GDB停止)、print(打印信号信息但不停止)等。
  9. 线程和进程控制

    • info threadsinfo inferiors:显示当前所有线程或进程的信息。
    • thread thread_numthread apply all command:切换到指定线程或在所有线程上执行命令。
  10. 宏和记录

    • define macro_name:定义一个宏。
    • record:开始记录执行历史,用于事后回放。
    • reverse-nextreverse-step:在录制的执行历史中反向执行下一步或进入函数。
  11. 附加到进程

    • attach pid:附加到正在运行的进程进行调试,pid为目标进程的进程ID。
    • detach:从调试的进程分离,让进程继续独立运行。
  12. 汇编代码查看

    • disassemble [function]disas:反汇编指定函数或当前指令的机器码。
    • layout asm:在GDB的TUI模式下显示源代码和汇编代码的并排视图。
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值