GDB调试基础知识

这篇具有很好参考价值的文章主要介绍了GDB调试基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念

  • GDB 是由 GNU 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境,GDB 是 Linux 和许多类 Unix 系统中的标准开发环境。
  • 一般来说,GDB 主要帮助你完成下面四个方面的功能:
    • 启动程序,可以按照自定义的要求随心所欲的运行程序。
    • 可让被调试的程序在所指定的调置的断点处停住(断点可以是条件表达式)。
    • 当程序被停住时,可以检查此时程序中所发生的事。
    • 可以改变程序,将一个 BUG 产生的影响修正从而测试其他 BUG。

准备工作

  • 使用以下命令编译:gcc -g -Wall program.c -o program

    • 通常,在为调试而编译时,我们会关掉编译器的优化选项-O), 并打开调试选项-g)(只有这样在编译时才会将代码信息加入可执行程序中,并不是将代码放到编译文件,而是当需要时会从原来路径里找代码,如果删除则找不到)。另外,-Wall在尽量不影响程序行为的情况下选项打开所有warning,也可以发现许多问题,避免一些不必要的 BUG
    • -g 选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证 gdb 能找到源文件
  • 注:当在 gdb 中直接使用回车时,会默认执行上一条命令

常用命令

说明

  • 启动与退出查看当前文件代码使用test.c
  • 后续内容使用课件中其他源程序

启动与退出

  • 启动:gdb 可执行程序
  • 退出:quit/q
    GDB调试基础知识,Linux,linux,gdb

给程序设置参数/获取设置参数

  • 设置参数:set args 10 20
  • 获取设置参数:show args
// test.c 源码
#include <stdio.h>
#include <stdlib.h>

int test(int a);

int main(int argc, char* argv[]) {
    int a, b;
    printf("argc = %d\n", argc);

    if(argc < 3) {
        a = 10;
        b = 30;
    } else {
        a = atoi(argv[1]);
        b = atoi(argv[2]);
    }
    printf("a = %d, b = %d\n", a, b);
    printf("a + b = %d\n", a + b);

    for(int i = 0; i < a; ++i) {
        printf("i = %d\n", i);
        // 函数调用
        int res = test(i);
        printf("res value: %d\n", res);
    }

    printf("THE END !!!\n");
    return 0;
}

int test(int a) {
    int num = 0;
    for(int i = 0; i < a; ++i) {
        num += i;
    }
    return num;
}

GDB调试基础知识,Linux,linux,gdb

GDB使用帮助

  • help

GDB调试基础知识,Linux,linux,gdb

vim 查看代码设置代码行数可以使用:

:set nu

查看当前文件代码

  • 从默认位置显示:list/l,源代码文件不能删除或移动,如果啥都不输入按回车默认运行上次命令。

GDB调试基础知识,Linux,linux,gdb

  • 从指定的行显示:list/l 行号,并不是从该行显示,而是显示该行的上下文信息。

GDB调试基础知识,Linux,linux,gdb

  • 从指定的函数显示:list/l 行号,同样显示上下文信息。

GDB调试基础知识,Linux,linux,gdb

  • 多文件编译时list会显示主函数的代码,此时如果想看其余文件的代码可通过:

    g++ bubble.cpp main.cpp select.cpp -o main -g
    
    gdb main
    
    list
    
    list bubble.cpp 1(1表示行)
    
    l select.cpp:10
    
    或者通过文件名加函数的形式
    l select.cpp:selectSort
    
  • 注:查看时会显示前后文

查看非当前文件代码

  • 编译运行并使用gdb main

GDB调试基础知识,Linux,linux,gdb

  • 从指定文件指定的行显示:list/l 文件名:行号

GDB调试基础知识,Linux,linux,gdb

  • 从指定文件指定的函数显示:list/l 文件名:函数名

GDB调试基础知识,Linux,linux,gdb

查看及设置显示的行数

  • 查看显示的行数:show list/listsize
  • 设置显示的行数:set list/listsize

GDB调试基础知识,Linux,linux,gdb

断点操作

  • 查看断点:i/info b/break

  • 设置一般断点

    • b/break 行号
    • b/break 函数名
    • b/break 文件名:行号
    • b/break 文件名:函数
  • 设置条件断点(一般用在循环的位置):b/break 10 if i==5

GDB调试基础知识,Linux,linux,gdb

  • 删除断点:d/del/delete 断点编号
  • 设置断点无效:dis/disable 断点编号
  • 设置断点生效:ena/enable 断点编号

GDB调试基础知识,Linux,linux,gdb文章来源地址https://www.toymoban.com/news/detail-575782.html

调试操作

  • 运行 GDB 程序
    • 程序停在第一行:start
    • 遇到断点才停:run
  • 继续运行,到下一个断点停:c/continue
  • 向下执行一行代码(不会进入函数体):n/next
  • 变量操作
    • 打印变量值:p/print 变量名
    • 打印变量类型:ptype 变量名
  • 向下单步调试(遇到函数进入函数体)
    • s/step
    • 跳出函数体:finish
  • 自动变量操作
    • 自动打印指定变量的值:display 变量名
    • 查看自动变量:i/info display
    • 取消自动变量:undisplay 编号
  • 其它操作
    • 设置变量值:set var 变量名=变量值 (循环中用的较多)
    • 跳出循环:until,循环里面不能有断点

到了这里,关于GDB调试基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux--调试器:gdb

    gcc与g++默认动态链接形成的可执行程序(比如a.out)是 release 版本,不可调试!!! 如何搞成debug可调试版本? 查看可执行程序存储了哪些内存空间:   调试语法:

    2024年02月13日
    浏览(51)
  • 【Linux】Linux调试器-gdb使用

    程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 退出:  调试命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某

    2024年02月21日
    浏览(50)
  • [Linux] Linux代码调试器 -- gdb

    1、程序的发布方式有两种,debug模式和release模式 2、Linux gcc/g++出来的二进制程序,默认是release模式 3、要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 我们先来写一段C语言代码: 这里我们正常再编写一个Makefile文件,用于自动化构建,我们要还是正常的编

    2024年02月05日
    浏览(44)
  • Linux系统gdb调试常用命令

    GDB(GNU调试器)是一款常用的调试工具,用于调试C、C++等编程语言的程序。以下是一些常用的GDB命令: 1. 启动程序:    - `gdb executable`:启动GDB调试器,并加载可执行文件。 2. 设置断点:    - `break line`:在指定行设置断点。    - `break function`:在指定函数的入口处设置断

    2024年02月10日
    浏览(40)
  • Linux调试器之gdb

    我们前面介绍了几个基本的环境开发工具。例如通过yum我们可以安装和卸载软件、通过vim我们可以写代码、通过gcc和g++我们可以编译代码成可执行程序。但是如何在Linux下调试代码呢?我们并未介绍,本期我们将来介绍最后一个工具 --- 调试器gdb。 程序的发布方式 gdb基本的调

    2024年04月16日
    浏览(67)
  • 【linux】“gdb“调试方法与技巧

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门到精通 🎉代码仓库:小智的代码仓库 gdb是一款开源的、功能强大的调试器,它可以用于调试多种编程语言,如C、C++、汇编语言等。gdb可以帮助开发者在程序运行时进行调试,并找到程序

    2024年02月16日
    浏览(36)
  • Linux - 还不懂 gdb 调试器?(调试软件)

    当前,我们可以使用 make/makefile 来程序化执行代码文件;可以使用 gcc/g++ 等编译器来编译代码;可以使用 vim 编辑器来编写代码;其实在 Linux 当中还有一个工具,可以实现调试工作,这个工具就是 -- gdb。 在了解调试器之前,你应该对代码的发布版本做一些了解: 我们在 VS

    2024年02月07日
    浏览(54)
  • 【Linux工具】编译器、调式器、项目自动化构建工具以及git的使用3(GDB调试器的基础使用)

    作者:爱写代码的刚子 时间:2023.7.18 前言:本篇博客主要讲解Linux中调试器的使用,为之后的Linux编程打下坚固的基础。 背景 程序的发布方式有两种,debug模式(能被调试 )和release模式 Linux gcc/g++出来的二进制程序, 默认是release模式 要使用gdb调试,必须在源代码生成二进制程

    2024年02月17日
    浏览(47)
  • 【Linux】Linux下调试器gdb的使用

    👑作者主页:@安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux 如果无聊的话,就来逛逛 我的博客栈

    2024年02月19日
    浏览(41)
  • 【Linux】gdb调试器的使用

    文章目录 一、gdb简介 二、调试前的准备 1、生成调试文件 2、启动 gdb  三、gdb 使用方法  1、查看源代码 2、设置 / 查看断点(多种方式设置断点) 方法一 方法二 方法三 3、run  4、删除断点、断点无效 5、逐过程调试(以函数为单位) 6、逐语句调试 7、查看调用链 8、查看变

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包