• Linux下gdb常规调试



    Linux系统:ubuntu-20.04

    gdb简介

    gdb 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。一般来说,gdb主要帮助我们完成以下四个方面的功能:

    • 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
    • 在某个指定的地方或条件下暂停程序。
    • 当程序被停住时,可以检查此时你的程序中所发生的事。
    • 在程序执行过程中修改程序中的变量或条件,将一个bug产生的影响修正从而测试其他bug。

    • 1. gdb安装
    sudo apt-get install gdb
    
    • 1

    在这里插入图片描述

    • 2. 编写例程
    #include"stdio.h"
    
    void func()
    {
    	int i=0;
    	for(i=0;i<5;i++)
    	{
    		printf("%d\n",i);
    	}
    }
    
    int main()
    {
    	func();
    	return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述
    编译运行正常。

    • 3. 进行gdb调试
      接下来进行调试,调试须在gcc test1.c的编译后加个-g表示需对此文件进行gdb调试,然后gdb a.out进入gdb调试模式,如下:

    ①输入“r”表示run 运行程序
    在这里插入图片描述

    ②输入“l”表示list 查看源程序
    由于字符受限,如果一次看不完整则多 l 几次
    在这里插入图片描述

    ③输入“b 14”表示在第14行打断点
    ④输入“s”表示step 进入到断点
    ⑤输入“n”表示next 进入到下一条语句
    ⑥输入“p i”表示printf 打印此时变量 i 的值
    在这里插入图片描述

    ⑥可以在gdb中用shell调用终端命令,例如输入“shell cat test1.c”表示查看文件内容
    在这里插入图片描述

    ⑦输入quit 表示退出gdb调试模式
    在这里插入图片描述

    ⑧输入set logging on 表示开启日志文件功能,会生成一个gdb.txt文件
    ⑨输入watch i 表示观察点,观察 i 变量
    ⑩输入info watchpoints 表示擦看观察点情况
    在这里插入图片描述

    在这里插入图片描述

    • 调试core文件
      如果core文件没有生成,则需要去查看你的ulimit限制,用“ulimit -a”,解除限制用“ulimit -c unlimited”。
      在这里插入图片描述
      解除限制后,再编译生成core文件,查看段错误:gdb 二进制文件 core文件

    • 调试一个正在执行的文件(例如死循环)
      ./a.out &表示再后台运行,执行后会返回一个进程号
      gdb -p pid
      在这里插入图片描述

    gdb常用命令汇总

    在这里插入图片描述

  • 相关阅读:
    MyBatisPlus学习(4)—— 设置实体类
    Dubbo环境搭建
    【论文下饭】A Systematic Survey on Deep Generative Models for Graph Generation
    实验20:火焰报警器实验
    Coremail邮件安全网关:双一流高校背后的邮件安全专家
    Deno 命令行界面
    VSCode连接远程服务器及docker
    LeetCode_双指针_中等_611.有效三角形的个数
    js 面试题学习笔记一
    代码随想录算法训练营第五十二天| LeetCode1035.不相交的线、583. 两个字符串的删除操作、72. 编辑距离
  • 原文地址:https://blog.csdn.net/Dustinthewine/article/details/133186425