GDB使用

7 篇文章 0 订阅
6 篇文章 0 订阅

系统启动

 

使用GDB调试程序前,编译时最好打开调试开关(如:gcc增加-g选项)

使用GDB启动程序: gdb 程序名

如: gdb main

 

使用GDB调试已存在的进程: gdb -pid 进程号

如:gdb -pid 12345

 

运行:run

 

设置断点:break 行号

如: break 30

 

显示断点信息: info break

 

删除所有断点:delete break 

删除指定断点:delete break [断点号]

 

继续运行: continue

 

显示代码: list

 

显示堆栈:bt

 

显示当前地点:where

 

显示线程信息:info thread

 

切换线程:thread ID 


在所有线程中相应的行上设置断点:break thread_test.c:123 thread all 

在指定线程中相应的行上设置断点:break thread_test.c:123 thread 线程号


 让一个或者多个线程执行GDB命令command: thread apply ID1 ID2 command 


让所有被调试线程执行GDB命令command: thread apply all command


set scheduler-locking off|on|step 实际使用过多线程调试的人都可以发现,在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。 step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行

 

在linux平台下,设置core dump文件生成的方法:
1) 在终端中输入ulimit -c 如果结果为0,说明当程序崩溃时,系统并不能生成core dump。
2) 使用ulimit -c unlimited命令,开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可。ulimit - c 1024
3) 默认情况下,core dump生成的文件名为core,而且就在程序当前目录下。新的core会覆盖已存在的core。通过修改/proc/sys/kernel/core_uses_pid文件,可以将进程的pid作为作为扩展名,生成的core文件格式为core.xxx,其中xxx即为pid
4) 通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:将所有的core文件生成到/corefile目录下,文件名的格式为core-命令名-pid-时间戳. echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

5)调试core文件,gdb 程序名 core文件名

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值