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,即可查看当前的堆栈回溯信息。

相关推荐
码农学院34 分钟前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
广州灵眸科技有限公司8 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大耳朵-小飞象9 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技10 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室12 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
生活爱好者!13 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
王维同学14 小时前
[原创][Windows C++]LSA 认证、安全与通知包的注册表枚举
c++·windows·安全
YCOSA202514 小时前
雨晨 Windows 11 IOT 企业版 LTSC 24H2 轻装 2合1 26100.8968
windows·物联网
groundhappy14 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python