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::function 或 function(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 命令行输入 bt 或 backtrace,即可查看当前的堆栈回溯信息。

相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies3 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
未济3 天前
linux 配置环境变量
linux
傲世仙尊3 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.3 天前
进程间通信
linux
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-053 天前
Linux IO编程——静态库、动态库
linux
此冬歌咏3 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试