GDB调试命令使用详细介绍

一、使用GDB调试一个简单的程序

helloworld.c,代码如下:

#include <stdio.h>
int main()
{
	printf("hello world\n");
	return 0;
}

编译,注意必须使用-g,以生成带调试信息的可执行程序

gcc -g helloworld.c -o hello

对hello程序,进行调试

gdb hello

运行hello

r

也可以在启动前通过其他命令设置断点,一步一步调试。

二、GDB命令详细介绍

1、流程控制相关

命令描述
rrun,启动被调试的程序
ctrl+c中断正在执行的程序
ccontinue,继续执行
sstep,单步跟踪,如果有函数调用,会进入该函数
nnext,单步跟踪,如果有函数调用,不会进入该函数
Ctrl+X+A打开当前执行位置源文件,可配合打断点,做到跟踪执行时实时查看该位置源码

2、断点相关

命令描述
b 100break,在当前文件中第100行,设置断点
b xx.c:100break,在xx.c文件中第100行,设置断点
p xx.c:100 if aa==20条件断点,当变量aa==20时,xx.c中第100行代码处断点生效
clear 100删除当前文件中第100行处的断点
clear xxx.c:100删除xxx.c文件中第100行处的断点
save breakpoints ./xxx.brk把所有的断点保存到xxx.brk文件中
ibinfo breakpoints,查看所有的断点信息
disable禁用断点,缩写为dis
enable启用断点
ddelete可删除单个断点,也可删除一个断点的集合。如果只输入d,不加任何参数,则表示删除所有断点。

3、调用堆栈相关

命令描述
btbacktrace,查看程序调用堆栈信息
frame N切换到第N层栈帧,程序实际执行位置为第0层,往上依次1,2,3,…
up N表示在当前栈帧编号(假设为M)的基础上,切换到M+N编号的栈帧
down N表示在当前栈帧编号(假设为M)的基础上,切换到M-N编号的栈帧

4、查看内存相关

命令描述
p xx打印变量或表达式xx的值
p /x *buf@128对于unsigned char* buf = malloc(256)时,表示以16进制格式,打印buf开始连续128字节内容
p /x * (unsigned int*)buf@32对于unsigned char* buf = malloc(256)时,表示将buf按连续4字节看作一个元素,以16进制格式,打印buf开始连续32个元素内容。
效果如下:{0x11223344, 0x55667788, …}。
display xx跟踪查看一个变量xx,每次停下来都显示它的值
set var xx=47修改变量xx的值为47
watch xx观察xx的值,当有变化时,停止



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

百里杨

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值