博客
关于我
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服务端实现post请求
    查看>>
    nodejs框架,原理,组件,核心,跟npm和vue的关系
    查看>>
    Nodejs概览: 思维导图、核心技术、应用场景
    查看>>
    nodejs模块——fs模块
    查看>>
    Nodejs模块、自定义模块、CommonJs的概念和使用
    查看>>
    nodejs生成多层目录和生成文件的通用方法
    查看>>
    nodejs端口被占用原因及解决方案
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>
    NodeJs连接Oracle数据库
    查看>>
    nodejs配置express服务器,运行自动打开浏览器
    查看>>
    NodeMCU教程 http请求获取Json中文乱码解决方案
    查看>>
    Nodemon 深入解析与使用
    查看>>
    NodeSession:高效且灵活的Node.js会话管理工具
    查看>>
    node~ http缓存
    查看>>
    node不是内部命令时配置node环境变量
    查看>>
    node中fs模块之文件操作
    查看>>