【gdb调试器】gdb的调试参数和使用方法

GDB调试器

  • GDB(GNU Debugger)是一个用来调试C/C++程序的功能强大的调试器,是linux系统开发C/C++最常用的调试器
  • 程序员可以使用GDB来跟踪程序中的错误从而减少工作量
  • VSCode是通过调用GDB调试器来实现C/C++的调试工作的

GDB主要功能

  1. 设置断点(断点可以是条件表达式)
  2. 使程序在指定代码行上暂停执行,便于观察
  3. 单步执行程序,便于调试
  4. 查看程序中变量值的变化
  5. 动态改变程序的执行环境
  6. 分析崩溃程序产生的core文件

常用调试命令参数

在调试开始时:执行gdb 可执行文件,进入gdb调试程序.常用参数如下:
下面命令括号内为简写,比如run和r同意

$(gdb) help(h)                 #查看命令帮助
$(gdb) run(r)                  #重新开始运行文件
$(gdb) start                   #单步执行
$(gdb) list(l)                 #查看源代码,(list-n, 从第n行开始查看代码,list+函数名:查看具体函数)
$(gdb) set                     #设置变量的值
$(gdb) next(n)                 #单步调试(逐过程,  函数直接执行)
$(gdb) step(s)                 #单步调试(逐语句:跳入自定义函数内部执行)
$(gdb) backtrace(bt)           #查看函数调用的栈帧和层级关系
$(gdb) frame(f)                #切换函数的栈帧
$(gdb) info(i)                 #查看函数内部局部变量的数值
$(gdb) finish                  #结束当前函数 返回函数调用点
$(gdb) continue(c)             #继续运行
$(gdb) print(p)                #打印值和地址
$(gdb) quit(q)                 #退出gdb
$(gdb) x                       #查看内存x/20xw 显示20个单元, 16进制, 4字节每单元
$(gdb) run argv[1] argv[2]     #调试时命令行传递参数
$(gdb) break+num(b)            #在第num行设置断点
$(gdb) info breakpoints(i b)   #查看所有设置的断点
$(gdb) delete breakpoints num(d)   #删除第num个断点
$(gdb) display                 #追踪查看具体变量值
$(gdb) undisplay               #取消追踪观察变量
$(gdb)  watch                  # 被设置观察点的变量发生修改时,打印显示
$(gdb) i watch                 #显示观察点
$(gdb) enable breakpoints      #启用断点
$(gdb) disable breakpoints     #禁用断点

小例子测试gdb

我们的sum.cpp源码如下:

#include<iostream>
using namespace std ;

int main(int argc, char * argv[])
{
	int N = 100 ;
	int sum = 0 ;
	int i = 1 ;
	
	while(i <= N)
	{
		sum = sum + i ;
		i = i + 1 ;
	}
	
	cout << "sum = " << sum << endl ;
	cout << "The program is over " << endl ;
	
	return 0 ;
}

编译生成可执行文件

在编译时一定要加入-g参数来允许GDB调试(尽管这会使可执行程序耗费更多资源):

g++ -g sum.cpp -o sum

调试查看

  1. 输入 gdb num 进入调试界面
  2. 在命令行模式下:set nu显示行号
  • 建议调试GDB时,另起一控制台显示程序和行号,如下:
    在这里插入图片描述

  • 给13行打断点:b 13

  • 运行至断点run

  • 查看一次i的值,print i ,只会查看一次

  • 持续查看i的值,display i ,在每次执行,都会展示一次i的值

  • 退出gdb调试q

  • 按enter会执行上一条指令

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值