博客
关于我
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/

    你可能感兴趣的文章
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    nodejs npm常用命令
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS yarn 或 npm如何切换淘宝或国外镜像源
    查看>>
    nodejs 中间件理解
    查看>>
    nodejs 创建HTTP服务器详解
    查看>>
    nodejs 发起 GET 请求示例和 POST 请求示例
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>
    nodejs 开发websocket 笔记
    查看>>
    nodejs 的 Buffer 详解
    查看>>
    NodeJS 的环境变量: 开发环境vs生产环境
    查看>>
    nodejs 读取xlsx文件内容
    查看>>
    nodejs 运行CMD命令
    查看>>
    Nodejs+Express+Mysql实现简单用户管理增删改查
    查看>>
    nodejs+nginx获取真实ip
    查看>>
    nodejs-mime类型
    查看>>
    NodeJs——(11)控制权转移next
    查看>>
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>