博客
关于我
Linux下gdb调试器的简单使用方法
阅读量:612 次
发布时间:2019-03-13

本文共 1716 字,大约阅读时间需要 5 分钟。

GDB(GNU Symbolic Debugger)手册

GDB 是 GNU 项目中的一个调试器,它允许你在程序运行期间观察正在执行的操作,或在程序崩溃时查看崩溃时的状态。GDB 主要用于调试可执行程序以及分析核心转储文件(Coredump)。


GDB 的主要功能

GDB 可以执行以下主要操作:

  • 启动你的程序,并指定可能影响其行为的所有内容。
  • 在指定条件下使程序停止。
  • 检查程序在停止时发生的情况。
  • 修改程序内容,以便尝试纠正错误,并继续分析其他错误。

在 Linux 下使用 GDB 准备调试版本

在 Linux 下,gcc 或 g++ 编译的二进制程序默认是发布版本(release),即不包含调试信息。如果你想使用 GDB调试,请在编译时添加以下选项:

gcc -g -o Feb5 fib.o

这样,生成的二进制文件“Feb5”将包含调试信息,适合用 GDB 调试。


##步骤说明:使用 GDB 调试可执行程序

  • 编译准备阶段

    编译阶段不需要特别的处理,只需确保使用了 -g 选项以生成调试版本。如果你使用的是现有的二进制文件,可以通过下述方式启动调试:

  • 启动调试

    在终端中启动 GDB:

    gdb Feb5
  • 浏览代码

    使用 listl 命令浏览代码:

    • 显示某一行及其后续 10 行代码:

      list /l 5
    • 显示某个函数的代码:

      list /l fib
  • 运行程序

    使用 runr 命令运行程序:

    run /r

    这将执行程序并输出结果(如斐波那契数的第五项为 "5")。

  • 设置断点

    断点是调试中的重要工具,可以帮助你定位程序的执行路径。

    • 在某一行设置断点:

      break /b 5
    • 在某个函数的开头设置断点:

      break /b fib
    • 查看断点详情:

      info break
  • 执行控制命令

    • 逐步执行当前行:

      next /n
    • 逐行执行代码(等同于 Visual Studio 的 F11):

      step /s
    • 打印变量或表达式的值:

      print /p var_name
    • 继续执行当前断点后的代码:

      continue /c
  • 删除和启用/禁用断点

    操作断点的方法:

    delete /d 1enable /e 2disable /d 2
  • 退出 GDB

    当调试完成后,输入以下命令退出:

    quit /q

  • 调试核心转储文件

    如果程序在崩溃时生成了内存镜像文件(core),你可以用 GDB 分析 crashes。

    样本场景:内存越界错误

    假设你的程序中有如下错误:

    int* p = 0;*p = 10;

    这种情况会导致 segment fault 错误(内存越界)。

    生成核心转储文件的条件

    确保以下条件:

    • Linux 环境:修改 ulimit 设置:

      ulimit -c unlimited

      这将允许较大的核心转储文件生成。

    • 磁盘空间:必须有足够的磁盘空间来存储 core 文件。

    生成核心转储文件

    运行程序时,确保程序会崩溃:

    ./Feb5

    这将生成一个名为 Feb5.core 的核心转储文件。

    使用 GDB 调试核心文件

    完成后,启动 GDB,并指定核心文件:

    gdb Feb5 Feb5.core

    分析 crash 情况

    GDB 会自动进入崩溃模式,并显示相关信息。例如:

    _program received signal 11, stopped at 0x0 in _some_function ()from /absolute/path/to/Feb5()ギ多少.backtrace[l000x0000000.0 0  1  2  3]

    你可以使用 backtrace 命令查看调用栈:

    backtrace /bt

    导致崩溃的代码行

    GDB 会显示导致程序崩溃的具体代码行。例如:

    0x004d3b0 in _some_function () at Feb5.c:6: ,pointers:( cabelonedefault */

    此外,使用 print 命令分析错误信息:

    print /p *p

    通过以上步骤,你可以使用 GDB 进行程序调试和核心文件分析。如果有任何问题,可以参考 GDB 在线文档或社区求助。

    转载地址:http://vjzaz.baihongyu.com/

    你可能感兴趣的文章
    Palindrome Number leetcode java
    查看>>
    Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
    查看>>
    Palo Alto Networks Expedition 远程命令执行漏洞(CVE-2024-9463)
    查看>>
    Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
    查看>>
    Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
    查看>>
    Springboot中@SuppressWarnings注解详细解析
    查看>>
    Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
    查看>>
    Panalog 日志审计系统 sprog_upstatus.php SQL 注入漏洞复现(XVE-2024-5232)
    查看>>
    Panalog 日志审计系统 前台RCE漏洞复现
    查看>>
    PANDA VALUE_COUNTS包含GROUP BY之前的所有值
    查看>>
    pandas - 如何将所有列从对象转换为浮点类型
    查看>>
    Pandas - 按列分组并将数据转换为 numpy 数组
    查看>>
    Pandas - 按日期对日内时间序列进行分组
    查看>>
    Pandas - 有条件的删除重复项
    查看>>
    pandas -按连续日期时间段分组
    查看>>
    pandas -更改重新采样的时间序列的开始和结束日期
    查看>>
    SpringBoot+Vue+Redis前后端分离家具商城平台系统(源码+论文初稿直接运行《精品毕设》)15主要设计:用户登录、注册、商城分类、商品浏览、查看、购物车、订单、支付、以及后台的管理
    查看>>
    pandas :to_excel() float_format
    查看>>
    pandas :从数据透视表中的另一列中减去一列
    查看>>
    pandas :加入有条件的数据框
    查看>>