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

相关推荐
charlie1145141916 小时前
如何把 Win32 窗口“置顶”(Windows + C++)
开发语言·c++·windows·笔记·学习·软件工程
WG_176 小时前
Linux:基础IO(18+19)+文件描述符
linux·运维·服务器
fiveym6 小时前
解析Debian 10安装Intel Xeon Silver 4510卡住问题及Debian 11/12支持改进
运维·debian
开利网络6 小时前
从“流量”到“留量”:长效用户运营的底层逻辑
大数据·运维·人工智能·自动化·云计算
嘻哈baby7 小时前
管理100台服务器是什么体验?Python一行代码搞定
运维
十六年开源服务商7 小时前
怎样做好WordPress网站数据分析与运维服务
运维·数据挖掘·数据分析
莫白媛7 小时前
浅谈Linux部分语法(从基础操作到自动化编程的三个层次)
linux·运维·自动化
快解析7 小时前
内网穿透快解析注册后添加配置端口教程
linux·服务器·网络
李斯维7 小时前
MBR 和 GPT 区别
windows·嵌入式硬件·bootstrap·计算机外设
tianyuanwo7 小时前
Linux密码管理深度解析:passwd与chpasswd的底层机制对比
linux·运维·passwd·chpasswd