美文网首页
2. gdb的使用

2. gdb的使用

作者: 郑行_aover | 来源:发表于2019-03-21 10:11 被阅读0次

参考链接
1. GDB调试
2. gdb调试方法
3. gdb调试示例


1. 说说 gdb

gdb 是一款 UNIX 系统下基于命令行的程序调试利器,它功能强大,但其命令行的方式想必是挡住了一大波程序员,默默的继续使用 printf。

2. 开始 gdb 调试

  • 1、启动 gdb
gdb ./exe
直接启动调试 exe。
gdb ./exe <core dump file>
启动调试 exe 并带上 coredump file
gdb ./ex e PID
启动调试一个运行中的程序,带上其 PID
  • 2、设置 so 的搜索路径(如果有用到的话)
set sysroot PATH
set solib-absolute-prefix PATH

这里 sysroot 和 solib-absolute-prefix 是等价的,意为查找绝对路径库的头部,如 exe 有使用 /usr/lib 下面的库,则设置完 sysroot 后其搜索路径就变成了 /PATH/usr/lib,有点取代根目录的意思。

另外一个设置 so 搜索路径的参数是 set solib-search-path,与上不同的是它可以设置多个路径,用冒号间隔。
它可以用来应对一些使用相对路径的情况,如 dlopen 加载的一些库,设置合理可以取代 sysroot。

set solib-search-path PATH
set solib-search-path PATH1:PATH2
  • 3、设置程序运行参数(如果有的话)
set args param1 param2
show args
即 main 函数的入口参数,使用空格间隔,show args 即查看设定好的参数。

3. gdb 调试进行时

  • 1、控制运行状态
run 或 r:使用程序运行,通常进入 gdb 后的第一条指令,遇到断点后停住,等待后续控制命令

continue 或 c:继续执行到下一个断点处,程序要先 run 起来后使用它

next 或 n:单步执行,遇函数时不进入

step 或 s:单步执行,遇函数会进入

until:用于进入循环体后直接运行程序直到循环体结束

untiil + 行号:直接运行到某行处

call fun():直接调用函数 fun

quit 或 q:退出 gdb
  • 2、查看源码
list 或 l:显示源码,每次 10 行
list 行号:显示当前文件行号前后的源码
list 函数名:显示函数名所在的源码
  • 3、打印或观察变量的值
print a 或 p a:打印 a 的值

print fun_test(a):将 a 作为参数调用 fun_test() 函数

display a:当程序中断时打印 a 的值,常用于断点和单步调试

watch a:设置观察的变量或表达式,当其值发生变化时中断程序

whatis a:查询变量或函数

info function:查询函数

info locals:显示当前栈页的所有变量
  • 4、查询运行信息
bt :打印当前的调用栈

info program:查看程序的运行状态

info threads:查看当前可调试的所有线程

thread apply all bt:展示所以线程的栈
  • 5、设置断点
break n 或 b n:在第 n 行处设置断点

b main.c:n:在 main.c 的第 n 行设置断点

b func:在 func() 函数入口处设置断点

info b:查看当前程序的断点情况

delete 断点号n:删除第 n 个断点

disable 断点号n:失能第 n 个断点

enable 断点号n:使能第 n 个断点

delete breakpoints:清除所有断点

四、gdb 远程调试

远程调试通常用于嵌入式程序开发当中,即程序编译在服务器端,而执行在目标板上(通常为 ARM 目标板)。

此时我们需要先在目标板上运行 gdbserver 如下:

gdbserver :7788 ./exe

即监听所有网卡的 7788 端口,并启动调试 exe 程序,或调试一个正在运行的程序.

gdbserver :7788 --attach pid

即为连接到进程号为 pid 的程序进行调试。

目标板上设置好了之后再到服务器上(通常是 Linux 服务器),先启动 gdb

gdb exe

然后连接到目标板:

target remote IP:7788

这里的 IP 则为目标板的 IP。

相关文章

  • 2. gdb的使用

    参考链接1. GDB调试2. gdb调试方法3. gdb调试示例 1. 说说 gdb gdb 是一款 UNIX 系...

  • GDB 配置

    摘要:调试器 GDB 的配置 GDB 配置 使用 GDB 扩展来配置 GDB 事实上我还是觉得原生的 GDB 就...

  • Linux下C++开发常用工具

    gdb 使用gdb的时候, 需要在编译时使用-g命令, 在编译时加入必要的C库gdb + filename进入调试...

  • gdb调试

    使用gdb:编译的时候加 -g 参数 启动gdb:gdb app(对应的可执行程序名) 在gdb启动后:r(un)...

  • GDB入门教程之如何使用GDB启动调试

    原文地址:GDB入门教程之如何使用GDB启动调试|Vim教程网 GDB (The GNU Project Debu...

  • 【实践】gdb调试golang程序入门及gdb命令列表

    1. 摘要 本文讲解gdb调试GOLANG程序的入门配置,以及gdb命令详解备忘。 2. gdb调试go程序入门...

  • gcc常用命令

    gdb相关 gcc加-g才能使用gdb调试gdb -tui a.out打开调试界面run/stop/continu...

  • Xcode debug Hotspot(一)——创建Xcode项

    概述 前面安装gdb调试hotspot里面,我记录了自己安装gdb调试hotspot的过程。后来我发现,使用gdb...

  • gdb

    gdb调试工具使用

  • GDB调试指南

    @[linux|gdb] 说明:从CSDN的网站上找到的GDB使用说明,这篇文章脉络清晰,浅显易懂,介绍了GDB大...

网友评论

      本文标题:2. gdb的使用

      本文链接:https://www.haomeiwen.com/subject/hdwfvqtx.html