GDB调试

调试命令建议显示程序代码的行数,可以设置vim。

方法:

Centos操作系统:

sudo vim /etcvimrc

Ubuntu操作系统:

sudo vim /etc/vim/vimrc

然后加入set number就行。

一、介绍

GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划,是 Linux 下常用的程序调试器。

二、安装

yum -y install gdb

安装需要服务器接入互联网。

三、调试准备

用gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果您打算编译后的程序可以被调试,编译的时候要加-g的参数,例如要编译test.c文件:

gcc -g -o test test.c

在命令提示符下输入gdb test就可以调试test程序了。

gdb test

四、设置主程序的参数

1.set args

设置主程序的参数,例如:

运行程序

./test arg1 arg2

那么设置参数的方法是:

gdb test
set args arg1 arg2

另外注意,在设置参数时,如果输入不正常参数,可能引发错误。

例如:

set args aaa bbb.c

你的想法是向程序的参数输入一个“aaa bbb.c”的字符串值。结果由于该字符串中间有个空格,导致程序会有两个参数,一个是aaa,另一个是bbb.c。

这种情况需要在该字符串加双引号,如下:

set args "aaa bbb.c"

2.break 命令缩写b

设置断点,程序运行到断点会停下。

例如:

b 20

将会在第20行设置断点,可以设置多个断点。

另外加上b 20 if value=10,假如有个循环,value初始值为0,每一次循环加1,则将在value=10的地方设置一个断点,这称为条件断点。

3.info b

查看所有断点的信息

4.run 命令缩写r

开始运行程序,程序运行到断点的位置会停下来,如果没有遇到断点,程序会一直运行下去。

r

5.start命令

单步执行,也就是执行一条语句的意思。

6.next 命令缩写n

执行当前语句,如果该语句为函数调用,不会进入函数内部执行。

7.step 命令缩写s

执行当前行语句,如果该语句为函数调用,则进入函数执行其中的第一条语句。 


注意了,如果函数是库函数或第三方提供的函数,用s也是进不去的,因为没有源代码,如果是您自定义的函数,只要有源码就可以进去。 

8.finish命令

退出当前函数调用。
 

9.print 命令缩写p

显示变量值,例如:

p value0

上面的命令会查看当前value0的值是多少。另外要注意的是,p后面也可以加表达式,例如:

p value+1000
p strcpy(name,"Simon")

strcpy函数是一个拷贝字符串的函数,函数返回一个指向最终的目标字符串的指针。

因此会显示Simon。

10.ptype 变量

查看变量类型

11.continue 命令缩写c

继续运行程序,直到运行到下一个断点。

12.set var name = value

设置变量的值,假设程序有两个变量: int value0; char name[100];

set val value0=10
set var name=cdz

第一行将value0的值设置为10

第二行set var name="西施”把name的值设置为"cdz",注意,没有动用strcpy函数。

11.backtrace命令缩写bt

查看所有栈帧。栈帧:随着函数调用而在stack栈上开辟的一片内存空间。用于存放函数调用时产生的局部变量和临时值。

与栈帧信息一同显示的还有标识栈帧的数字,利用该数字使用frame命令切换栈帧。
 

13.frame 数字

切换栈帧。因为每个函数都有一个栈帧,当执行一个函数时,另外一个函数的变量可能会改变,但我们正处在当前函数的栈帧,则不能查看另外一个函数的栈帧。

为了查看栈帧,我们切换到要查看函数的栈帧。然后再用p查看变量。

14.display命令

跟踪变量,display+变量,然后每按一个n,执行一步,并且显示跟踪变量的信息。

于此同时会给跟踪的变量添加标识的数字,用于undisplay,取消跟踪。

15.undisplay 

undisplay+数字,取消数字标识的变量跟踪。

16.quit 命令缩写q

退出gdb环境。

五、常见错误

没有加-g选项

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值