Linux GDB调试常用命令

运行

gdb调试,编译时一定要加上-g选项,否则没有debug调试信息

  • run(r),遇到断点处停止运行,等待下一步命令;
  • continue(c),继续运行到下一个断点或结束;
  • next(n),单步调试,遇到函数调用不进函数体,直接返回结果;
  • step(s),单步调试,遇到函数调用进入函数体;
  • until,在循环体调试时,可以直接跳出循环体;
  • until+行号,运行至某行;
  • finish,运行程序,知道当前函数结束返回值,打印返回时的堆栈地址和返回值及参数等信息;
  • call 函数(参数),调用程序中可见的函数;
  • quit(q),退出gdb。

设置断点

  • break+行号(b+n),在第n行出设置断点;
  • break+行号 if (条件语句) (b+n if (i>9)),条件断点,满足条件时停止;
  • break+函数名(b+func),在函数的入口处设置断点;
  • delete 断点号n,删除第n个断点;
  • disable断点号n,暂停第n个断点;
  • enable短点号n,开启第n个断点;
  • clear 行号n,清除第n行断点;
  • info b,显示当前程序的断点设置情况;
  • delete breakpoints,清除所有断点;

查看源代码

  • list(l),显示程序源代码,默认每次显示10行;
  • list+行号,显示行号前后10行代源码;
  • list+函数名,显示当前函数的源代码;
  • list,接着上一次命令继续显示源代码;

打印表达式

  • print 表达式(p+表达式);打印有效表达式的值,可以是函数调用;
  • watch 表达式,设置一个监视点,表达式被改变,gdb将终止调试;
  • whatis,查询变量和函数;
  • info function,查询所有函数;
  • info locals,显示当前堆栈页的所有变量;
  • info args,显示当前函数的参数名及其值
  • info line +“行号”,“函数名”,“文件名:行号”,“文件名:函数名”,显示函数运行时的内存地址

查看运行信息

  • where/bt,显示当前运行的堆栈列表;
  • bt backtrace,显示当前调用的堆栈;
  • up/down 改变当前栈显示的深度;
  • set args 参数,指定运行时的参数;
  • show args 参数,查看设置的参数;
  • info program,查看程序是否在运行,进程号,或被暂停的原因;

多窗口显示

  • layout,分割窗口,一遍测试,一遍查看代码;
  • layout src,显示源码;
  • layout asm,显示反汇编;
  • layput regs,显示源代码/反汇编和CPU寄存器;
  • layout split,显示源代码和反汇编窗口;
  • Ctrl+L,刷新窗口。

查看堆栈信息

  • bt(backtrace):打印当前函数调用栈的所有信息,包括:栈的层编号,当前函数名,函数参数值,寒素所在的文件,行号和函数执行到的语句
(gdb) bt
#0  func (tmp=@0x7fffffffe0cc: 0) at test.cpp:20
#1  0x0000000000400968 in main () at test.cpp:28
  • bt n:只打印栈顶上n层的栈信息;

  • f n(frame):查看某n层栈的信息,n从0开始,若没有参数,n默认为0;

  • up n:向栈的上面移动n层,n从0开始,若没有参数,n默认为0;

  • down n:向栈的下面以用n层,n从 0开始,若没有参数,你默认为0;

  • disassemble:显示当前执行的机器码;

  • p 动态数组变量名@len:显示动态数组的值

  • info registers:查看寄存器的情况。(除了浮点寄存器)

  • info all-registers查看寄存器的情况。(包括浮点寄存器)

多线程调试

多线程编译时要加上 -lpthread选项

  • info threads:查看当前可调试的线程,线程号前有*号,表示当前所在的线程;
  • thread + 线程号:可以进行线程切换;
  • gdb attach 主线程ID:将运行的线程加入到gdb中
  • info inferiors:查看当前进程信息
  • show scheduler-locking:查看当前线程锁定模式
  • set scheduler-locking [on|off|step]:on锁定当前线程,off不锁定任何线程。step散步调试时会使用
  • thread apply all bt:所有线程打印当先堆栈信息;

shell命令

  • ps aux|grep a.out:查看当前运行的进程
  • ps -aL|grep a.out:查看当前运行的轻量级进程
  • pstree -p 主线程id:查看主线程和新线程的关系
  • ps stack 线程ID:查看线程调用栈结构

详细讲解:

GDB调试指南 | 守望的个人博客

linux常用命令--开发调试篇 | 守望的个人博客

GDB实用插件(peda, gef, gdbinit)全解_OSKernelLAB(gatieme)-优快云博客_gdb gef

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值