GDB调试

安装

ubuntu在root用户下,

apt-get update
apt-get install gdb

基本调试

加入调试信息,需要在结尾加g

gcc –o filename filename.c -g
  • **o选项的作用是:**对命令输出结果进行导入操作,这里是把gcc –o a a.c -g的操作结果输出到文件a(文件名可以自定义)中进行保存。
  • **g选项的作用是:**在可执行文件中加入源码信息,比如:可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件都嵌入到可执行文件中,而是在调试时必须保证gdb能找到源文件。

常用基本命令

l                       相当于list,从第一行开始查看,可以重复操作滚动
break 16                在16行设置断点
break func              在某个函数处设置断点
info break              查看断点信息
r                       相当于run 开始运行程序
n                       相当于next开始单步执行,遇函数不进
s                       相当于step,单步执行遇函数进
c                       相当于continue,继续执行
p i                     相当于print i,打印某个变量的值
set var i = 0           设置某个变量的值为0
finish                  退出函数
q                       相当于quit,退出gdb

程序挂掉的core文件分析

开发和使用Unix程序时,有时程序莫名其妙的down了,却没有任何的提示(有时候会提示core dumped),这时候可以查看一下有没有形如core.进程号的文件生成,这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考。

首先需要生成core文件,使用ulimit -a命令查看配置
在这里插入图片描述
使用ulimit -c unlimited 设置为没有限制,再去运行故障的程序会生成core文件

运行需要调试的程序

使用gdb ./文件 生成的core文件直接查看段错误的位置

在gdb内使用bt命令可以查看函数的调用栈

调试正在运行中的程序

另一个窗口查看正在运行的进程编号,ps gref|ef filename

gdb filename -p pid号,此时程序就不跑了

bt查看此时程序执行到了哪里

再用n单步执行

多进程多线程调试

调试多进程程序

缺省调试的是父进程

set follow-fork-mode child

r,n,n,直到进入子进程

设置调试模式:set detach-on-fork [on/off],on其它进程运行,off非调试进程被挂起

查看可以调试的进程:info inferiors

切换调试的进程:inferior 进程id

调试多线程程序

下面是shell命令,

在编译的时候把线程库链接进来,gcc -g -o book book.c -lpthread

查看当前运行的进程ps aux | grep book

查看当前运行的轻量级线程 ps -aL | grep book

查看主线程和子线程之间的关系 pstree -p 主线程 id

下面是gdb命令

查看当前一共有多少个线程 info threads

切换线程 thread id

只运行当前线程 set scheduler-locking on

运行全部的线程 set scheduler-locking off

指定某线程执行gdb命令,thread apply 线程id cmd

指定全部线程执行gdb命令,thread apply all cmd

调试多进程多线程存在的问题及解决

设置断点或单步可能干扰多进(线)程之间的竞争状态,导致和真实环境不符。

解决办法:可以采用log日志的方法

cpp有个freecplus框架

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值