gdb调试

1、编译加 -g
gcc -g test.c -o test

2、常用指令
打开:gdb test 
离开:quit

查看源码:l+行数
跳至X行:until

断点:b+行数
查看断点信息:info breakpoints
删除所有断点:delete breakpoints
删除序号为n的断点:delete breakpoints n
禁用断点:disable breakpoints
启用断点:enable breakpoints

运行:r
进入函数调用:step
下一步:step
继续:continue
执行到当前函数返回:finish
查看各级函数调用及参数:breaktrace(bt)
查看当前栈帧局部变量的值:info(i) locals

查看变量:print+变量名
查看变量类型:whatis+变量
跟踪变量:display(取消undisplay)
监视点:watch

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

3、多进程调试
认设置下,在调试多进程程序时GDB只会调试主进程。
(1)查看状态
show follow-fork-mode
show detach-on-fork

follow-fork-mode detach-on-fork 说明:
parent                 on               只调试主进程(GDB默认)
child                    on               只调试子进程
parent                 off              同时调试两个进程,gdb跟主进程,子进程block在fork位置
child                    off              同时调试两个进程,gdb跟子进程,主进程block在fork位置

(2)设置调试子进程
set follow-fork-mode child
(3)查询所有进程
info inferiors
(4)切换进程
inferior <infer number>
(5)其他
add-inferior
remove-inferior
clone-inferior
detach
kill
show print inferior-events:用来打开和关闭inferior状态的提示信息。


4、多线程调试
在多线程编程时,当我们需要调试时,有时需要控制某些线程停在断点,有些线程继续执行。有时需要控制线程的运行顺序。有时需要中断某个线程,切换到其他线程。
(1)常用指令
info threads:查看所有线程
thread ID:切换调试的线程
(2)其他指令
break FileName.cpp:LinuNum thread all
所有线程都在文件FileName.cpp的第LineNum行有断点。

thread apply ID1 ID2 IDN command
让线程编号是ID1,ID2…等等的线程都执行command命令。

thread apply all command:所有线程都执行command命令。

set scheduler-locking off|on|step
在调式某一个线程时,其他线程是否执行。在使用step或continue命令调试当前被调试线程的时候,其他线程也是同时执行的,如果我们只想要被调试的线程执行,而其他线程停止等待,那就要锁定要调试的线程,只让他运行。
off:不锁定任何线程,默认值。
on:锁定其他线程,只有当前线程执行。
step:在step(单步)时,只有被调试线程运行。

set non-stop on/off
当调式一个线程时,其他线程是否运行。

set pagination on/off
在使用backtrace时,在分页时是否停止。

set target-async on/ff
同步和异步。同步,gdb在输出提示符之前等待程序报告一些线程已经终止的信息。而异步的则是直接返回。

show scheduler-locking
查看当前锁定线程的模式
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值