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

相关推荐
你想考研啊4 分钟前
linux安装jdk和tomcat和并自启动
java·linux·tomcat
chevysky.cn1 小时前
Jenkins自动部署CI/CD
运维·ci/cd·jenkins
习惯就好zz2 小时前
WSL2 安装Ubuntu卡在安装进度0%无响应问题解决
linux·windows·ubuntu·wsl·wsl2
躲猫猫的喵喵3 小时前
Ubuntu2204降内核版本
linux·运维·服务器·ubuntu
昌sit!3 小时前
Linux系统性基础学习笔记
linux·笔记·学习
zdslovezy4 小时前
CentOS 系统升级 OpenSSH 和 OpenSSL 的完整方案
linux·运维·centos
HIT_Weston4 小时前
18、【Ubuntu】【远程开发】技术方案分析:私网ip掩码
linux·tcp/ip·ubuntu
cccccc语言我来了4 小时前
(Linux (6):从包管理到工具探索,构建系统操作基础认知)
linux·运维·服务器
8K超高清5 小时前
高校巡展:中国传媒大学+河北传媒学院
大数据·运维·网络·人工智能·传媒
ben9518chen5 小时前
嵌入式Linux C语言程序设计九
linux·c语言