gdb调试部分

 

=======================================================================
GDB调试部分
=======================================================================
-----
调试普通程序
------------------------------------

01.【gdb】:开启gdb

02.【file XXX】:载入文件XXX

03.【b main】:在main函数设置断点

04.【r】:运行程序

05.【s】:下一步,但不进入函数

06【b servluo】:设置新函数断点

07.【c】:中途设置完断点后,继续运行程序

08.【n】:下一步,但进入函数

09.【finish】:从函数中出来

10.【bt】:查看当前函数栈

11.【info args】:打印当前函数参数

12.【info locals】:打出当前函数所有地自动变量

13.【info catch】:打印当前地函数异常信息

14.【info registers】:查看寄存器情况

15.【info thread】:查看运行线程信息

16.【q】:退出调试

-----
调试多进程程序
-------------------------------------

01.【gdb】:开启gdb

02.【set follow-fork-mode child】:遇到fork,进入子进程

03.【set detch-on-fork on】:fork后,转移子进程后,关掉父进程

04.余下与普通进程调试一样

使用这种方法调试多进程的子进程时,强制q退出,因为父进程已被kill,子进程会成为僵死进程。需要用kill杀死,以免影响往后的调试

【###】其他调试多进程的方法

1.attach:没用过

2.wrapper(专用于fork+exec):没用过

【###】调试过程中遇到的其他问题

遇到进程阻塞在read的时候,就在其他终端开启程序,向该进程发送信息即可

 

-----

多线程程序

-----------------------------------------

 

01.gdb

02.file XXX

03.r

04.ctrl+\

05.thread apply all bt  打印所有线程的线程栈,查看是否有死锁

【###】其他命令

 

 

info thread 查看当前线程信息

thread pid 切换到线程pid调试

thread apply all command   让所有线程执行命令command

thread apply  pid1 pid2 command 让线程pid1,pid2执行命令command

set scheduler-locking off | on | step 
在使用step或continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。
off 不锁定任何线程,也就是所有线程都执行,这是默认值。 
on 只有当前被调试程序会执行。 

------

 

内存泄漏检测

------------------------------------------------
valgrind --tool=memcheck  -leak-check=full  ./s    使用valgrind 的memcheck工具的 leak-check来检查是否有内存泄漏。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隨意的風

如果你觉得有帮助,期待你的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值