gdb 教程

GDB

GDB是Linux下的调试工具,可以调试C、C++、Go、java等语言

GDB提供了以下四个功能:

  • 程序启动时,可以按照自定义的要求运行程序,如设置参数和环境变量
  • 可以让被调试的程序在所指定的代码处暂停运行,并查看当前运行状态(如当前变量的值,函数的执行结果),即支持断点调试
  • 当程序被停止时,可以查看当前程序中的变量的状态
  • 在程序执行过程中,可以改变某个变量的值,还可改变代码的执行顺序

要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项,release 模式,如果没有 -g ,将看不见程序的函数名、变量名,所替代的全是运行时的内存地址

可以通过 readelf -S 可执行文件 | grep debugfile 可执行文件 查看某个二进制文件有没有调试信息,如下红色框是调试信息

在这里插入图片描述

启动 GDB 的方法

  • gdb program:调式方式启动运行无参程序

  • gdb program core:用 GDB 同时调试一个运行程序和 core 文件,core 是程序非法执行后 core dump 后产生的文件

    # 查看 limit
    (base) china@china:~$ ulimit -c
    0
    (base) china@china:~$ ulimit -a
    real-time non-blocking time  (microseconds, -R) unlimited
    core file size              (blocks, -c) 0
    data seg size               (kbytes, -d) unlimited
    scheduling priority                 (-e) 0
    file size                   (blocks, -f) unlimited
    pending signals                     (-i) 127327
    max locked memory           (kbytes, -l) 4084144
    max memory size             (kbytes, -m) unlimited
    open files                          (-n) 1024
    pipe size                (512 bytes, -p) 8
    POSIX message queues         (bytes, -q) 819200
    real-time priority                  (-r) 0
    stack size                  (kbytes, -s) 8192
    cpu time                   (seconds, -t) unlimited
    max user processes                  (-u) 127327
    virtual memory              (kbytes, -v) unl
### GDB调试工具使用教程 #### 一、概述 GDB(GNU Debugger)是一款功能强大的命令行调试工具,主要用于调试 C、C++ 等编程语言开发的应用程序。通过设置断点、单步执行以及查看变量值等功能,开发者可以更高效地定位并解决程序中的问题[^1]。 为了充分利用 GDB 的强大功能,在编译目标程序时需加入 `-g` 参数以生成调试信息。这一步骤对于后续的调试至关重要,因为只有包含了调试信息的目标文件才能被 GDB 正确解析和处理[^3]。 #### 二、基本操作流程 以下是使用 GDB 进行调试的主要步骤: ##### 1. 启动 GDB 并加载待调试程序 启动 GDB 可通过如下方式实现: ```bash gdb ./program_name ``` 其中 `./program_name` 是指代需要调试的可执行文件名称[^2]。 ##### 2. 设置断点 断点是调试过程中不可或缺的一部分,它可以让程序暂停在指定位置以便进一步分析。常见的断点设置方法有以下几种: - **按行号设置** ```bash break filename.c:line_number ``` - **按函数名设置** ```bash break function_name ``` 一旦设置了断点,可以通过 `info breakpoints` 查看当前所有的断点列表[^4]。 ##### 3. 单步执行与继续运行 当程序到达某个断点后,可以选择逐条语句执行或者直接跳过某些部分继续运行。 - **逐条语句执行 (step into)** ```bash step ``` - **跨过函数调用 (step over)** ```bash next ``` - **恢复程序正常运行直到遇到下一个断点** ```bash continue ``` ##### 4. 查看变量值及内存内容 在调试期间,经常需要观察特定变量的状态或某段内存区域的数据情况。 - 显示局部变量/全局变量的值: ```bash print variable_name ``` - 检查地址指向的内容: ```bash x /nfmt address ``` 这里 `/nfmt` 表示显示格式,比如 `/8bx` 就是以十六进制形式打印八个字节长度的信息[^2]。 ##### 5. 分析堆栈回溯 如果发生异常终止,则可通过堆栈跟踪来了解错误发生的上下文环境。 ```bash backtrace frame frame_index list ``` 以上命令分别用来展示完整的调用链路详情;切换至具体帧数对应的现场数据区;重新列举源码片段便于对照研究[^4]。 #### 三、高级特性简介 除了基础功能外,GDB 提供了许多额外的支持手段使得复杂场景下的排查工作更加便捷有效,例如条件触发器设定、表达式监视等等^。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值