gdb的常用命令,调试core文件,调试程序(C++)

一.安装gdb

输入下列命令

yum -y install gdb

二.常用命令

编译时加-g选项,且-o优化项不可使用,例如:

g++ -g -o demo demo.cpp

调试前首先要 gdb 目标程序,例如:

gdb demo

命令:

1.set args 用于设置程序运行的参数,方法是 set args 参数1  参数2 参数3 ...

2.break  用于设置断点   简写:b     例如b  7 就是在第七行设置断点,次数不限。

3.run 开始运行程序 简写:r    遇到断点停止 。

4.next 执行当前行语句  简写:n   如果行语句调用了函数,不会进入函数体内部。

5.step  也是执行当前行语句 简写:s 不同于next的是如果调用的不是库函数或者第三方函数,而是自定义有源码的函数则可以加入函数内部。

6.print 显示变量或表达式的值 简写:p   值得一提的是如果p一个表达式,会执行这个表达式,例如:

p 程序中变量i
显示执行到当前位置i的值

p 表达式ii+1
显示执行到当前位置ii的值+1,假设程序中有一个for(int ii{};ii<100;ii++){},那么循环就会少一次

p 与程序无关的表达式
显示表达式计算结果

7.continuen 继续运行程序,遇到断点停止,继续continue则继续跑下去 简写:c。

8.set var 设置变量的值,例如有两个变量int ii和char str[21]:

set var  ii=7
set var str[21]="fish"

三:gdb调试core文件

如果程序在运行的过程中发生了内存泄漏,会被内核强行终止,提示“段错误(吐核)”,内存的
状态将保存在 core 文件中,方便进一步分析。而Linux 缺省不会生成 core 文件,需要修改系统参数,步骤如下:

1.首先用ulimit-a查看当前用户的资源限制参数。

2.ulimit-c unlimited把core file size改为unlimited。

3.接着运行程序就可以产生core文件了。

4.运行 gdb 程序名 core 文件名。

5.在gdb中用bt命令查看函数调用栈。

例如:没有生成core文件之前

bt显示no stack

生成过程以及调试过程:

关注core file size(第一行),此外可以重点关注open fils,stack size这两个参数,根据字面意思也不难猜测,了解一下他们,此处不做赘述。

更改之后:

之后的调试按照上述步骤进行即可,注意,需要先确认目录中有了core文件,然后运行 gdb 程序名 core 文件名,bt才会有正确的显示。

四.gdb调试运行中的程序

gdb 程序名 -p 进程编号

查看进程编号的方法:用ps -ef |grep 程序名查看进程编号。

调试的时候跑着的程序会停下来,剩下的调试操作详见上述普通调试的内容。

基本的gbd使用方法就是这样了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值