linux GDB调试器

目录

GDB调试器

1,生成调试信息

使用编译器的 -g 参数可以生成调试信息。

g++ -g hello.cpp -o hello

2,启动gdb

  • 启动gdb:gdb program

    program为可执行文件,一般在当前目录下。

  • 设置运行参数
    set args : 可指定运行时参数。
    show args: 命令可以查看设置好的运行参数。

  • 启动程序
    run : 程序开始执行,如果有断点,停在断点处
    start: 程序向下执行一行。

示例:

2,显示源代码

用 list 命令来打印程序源代码。默认打印10行
list :显示当前行后面的程序。
list - :显示当前行前面的源程序。
set listsize count :设置一次显示源代码的行数。
show listsize:查看当前 listsize 的设置。

3,断点操作

当用gdb调试程序时,程序卡在某个断点处,但是我们想要继续运行程序时,需要在gdb状态下输入一些命令。

continue 命令 简称 c
step 单步执行,遇到函数会进如函数内部
next 单步执行,遇到函数会跳过
finish 命令,退出进入的函数

3.1 简单断点:

break 设置断点,简写为 b
b 10 : 设置断点,在源程序第10行。
b func: 设置断点,在func函数入口处。

3.2 多文件设置断点:

c++中可以使用 class::function(type , type) 格式来指定函数名

如果有命名空间,可以使用 namespace::class::function

break filename:linenum 在源文件filename的linenum行处停住。
break filename:function 在源文件filename的function函数的入口停住。
break class::functionfunction(type , type)
break namespace::class::function

3.3 查询所有断点:

  • info b
  • info break
  • i break
  • i b

3.4 条件断点:

一般来说,为断点设置一个条件,我们使用if关键词,后面跟其断电条件

设置一个条件断点:

b test.c:8 if Value == 5

3.5 维护断点:

delete [range...]:删除指定的断点,其简写命令为d。

clear filename:num: 删除源文件 filename 的第10行的断点。

disable [range...]:使指定断点无效。

enable [range...]使无效断点生效。

4,查看堆栈信息

当程序崩溃后,GDB 会自动暂停并给出类似 "Program received signal SIGSEGV, Segmentation fault." 这样的错误提示,此时在 GDB 命令行输入 btbacktrace,即可查看当前的堆栈回溯信息。

相关推荐
小小管写大大码3 小时前
如何让vscode变得更智能?vscode接入claude实现自动编程
运维·ide·vscode·自动化·编辑器·ai编程·腾讯云ai代码助手
嵩山小老虎3 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
Fleshy数模4 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
zhang133830890754 小时前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
a41324474 小时前
ubuntu 25 安装vllm
linux·服务器·ubuntu·vllm
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.5 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
物联网软硬件开发-轨物科技5 小时前
【轨物洞见】告别“被动维修”!预测性运维如何重塑老旧电站的资产价值?
运维·人工智能
程序员允诺5 小时前
[DevOps实战] 彻底解决依赖地狱:如何编译全静态、可移植的 Xorriso 工具
运维·devops
酣大智5 小时前
接口模式参数
运维·网络·网络协议·tcp/ip
一只自律的鸡5 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug