gdb x命令_基于VSCode和CMake进行C/C++开发第四讲GDB调试器

4.0 本文目录

本系列视频,B站首发,up主: xiaobing1016

dba9e5eaa37d36ba3835fa61de4fa1f7.png

前言:

  • GDB(GNU Debugger)是一个用来调试C/C++程序的功能强大的调试器,是Linux系统开发C/C++最常用的调试器

  • 程序员可以使用GDB来跟踪程序中的错误,从而减少程序员的工作量。

  • Linux  开发C/C++ 一定要熟悉 GDB

  • VSCode是通过调用GDB调试器来实现C/C++的调试工作的;

Windows 系统中,常见的集成开发环境(IDE),如 VS、VC等,

它们内部已经嵌套了相应的调试器

GDB主要功能:

  • 设置断点(断点可以是条件表达式)

  • 使程序在指定的代码行上暂停执行,便于观察

  • 单步执行程序,便于调试

  • 查看程序中变量值的变化

  • 动态改变程序的执行环境

  • 分析崩溃程序产生的core文件

4.1 常用调试命令参数

调试开始:执行gdb [exefilename] ,进入gdb调试程序,其中exefilename为要调试的可执行文件名

 1## 以下命令后括号内为命令的简化使用,比如run(r),直接输入命令 r 就代表命令run
2
3$(gdb)help(h)        # 查看命令帮助,具体命令查询在gdb中输入help + 命令 
4
5$(gdb)run(r)         # 重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件)
6
7$(gdb)start         # 单步执行,运行程序,停在第一行执行语句
8
9$(gdb)list(l)      # 查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数)
10
11$(gdb)set         # 设置变量的值
12
13$(gdb)next(n)        # 单步调试(逐过程,函数直接执行)
14
15$(gdb)step(s)        # 单步调试(逐语句:跳入自定义函数内部执行)
16
17$(gdb)backtrace(bt)  # 查看函数的调用的栈帧和层级关系
18
19$(gdb)frame(f)      # 切换函数的栈帧
20
21$(gdb)info(i)      # 查看函数内部局部变量的数值
22
23$(gdb)finish         # 结束当前函数,返回到函数调用点
24
25$(gdb)continue(c)    # 继续运行
26
27$(gdb)print(p)       # 打印值及地址
28
29$(gdb)quit(q)      # 退出gdb
30
31$(gdb)break+num(b)                 # 在第num行设置断点
32
33$(gdb)info breakpoints             # 查看当前设置的所有断点
34
35$(gdb)delete breakpoints num(d)    # 删除第num个断点
36
37$(gdb)display                     # 追踪查看具体变量值
38
39$(gdb)undisplay                    # 取消追踪观察变量
40
41$(gdb)watch                        # 被设置观察点的变量发生修改时,打印显示
42
43$(gdb)i watch                     # 显示观察点
44
45$(gdb)enable breakpoints         # 启用断点
46
47$(gdb)disable breakpoints          # 禁用断点
48
49$(gdb)x                            # 查看内存x/20xw 显示20个单元,16进制,4字节每单元
50
51$(gdb)run argv[1] argv[2]         # 调试时命令行传参
52
53$(gdb)set follow-fork-mode child   # Makefile项目管理:选择跟踪父子进程(fork())

Tips:

  1. 编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main

  2. 回车键:重复上一命令

4.2 【实战】命令行调试

给出一段简单代码,准备调试。

 1#include 
2using namespace std;
3
4int main(int argc,char **argv) 5{
6    int N = 100;
7    int sum = 0;
8    int i = 1;
9
10// calculate sum from 1 to 100
11    while (i <= N)
12    {
13        sum = sum + i;
14        i = i + 1;
15    }
16
17    cout <"sum = " <endl;
18    cout <"The program is over."   <endl;
19
20    return 0;
21}

END

da6cdf40-642e-eb11-8da9-e4434bdf6706.svg c05f9c6b1f139698e4a69484e60b1fc9.png

扫码关注公众号

微信号 : iVSCode

bilibili  : xiaobing1016

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值