• 【Linux系统化学习】开发工具——gdb(调试器)


    =========================================================================

    个人主页点击直达:小白不是程序媛

    Linux专栏:Linux系统化学习

    个人仓库:Gitee

    =========================================================================

    目录

    前言:

    gdb版本检查和安装

    Debug和Release

    gdb的使用

    其他指令


    前言:

    前几篇文章分别介绍了在Linux下的代码编辑器、编译器。在编写代码时难免会遇到一些Bug需要我们手动去调试我们的代码片段,在Windows系统下的集成化开发环境我们可能使用某个快捷键就可以进入调试,但是在没有可视化图标的Linux下我们要使用我们的调试器gdb进行调试。


    gdb版本检查和安装

    版本检查

    通过指令判断你的版本和是否安装gdb

    • gdb --version 

    安装

    • yum install -y gdb 

     


    Debug和Release

    我们知道我们编写的代码会有Debug和Release两个版本;Debug版本是我们程序员在实现某一个项目时使用的版本,可以进行各种调试;而Release版本时我们项目完成后,用户使用项目时的版本,不可以调试并且系统会做优化

    Windows下的集成开发环境默认为Debug版本,而在Linux下默认为Relase版本。

    如何证明在Linux下默认为Release版本呢?

    • 通过能否调试判断为Debug还是Release,Debug可以调试Release不可以调试。
    1. 1 #include<stdio.h>
    2. 2 int Sum(int n)
    3. 3 {
    4. 4 int i=0;
    5. 5 int sum=0;
    6. 6 for(i=1;i<=n;i++)
    7. 7 {
    8. 8 sum+=i;
    9. 9 }
    10. 10 return sum;
    11. 11 }
    12. 12 int main()
    13. 13 {
    14. 14 int n=100;
    15. 15 int ret=Sum(n);
    16. 16 printf("%d \n",ret);
    17. 17 return 0;
    18. 18 }

    我们在Linux下编写这样一段代码进行测试。

     

    • 通过判断可执行程序的大小判断; Debug系统没有优化比较大,Release系统优化比较小;

     因为Debug版本会添加调试信息,所以Debug版本文件会比Release版本大。

    通过查看Debug版本和Release版本的文件信息判断,上面说到Debug版本会添加调试信息;而Linux我们的可执行程序是ELF格式,我们可以通过这一点配合查询和管道在我们的Debug版本下查找是否有Debug的内容。

     


    gdb的使用

    • gdb [可执行程序文件名]   
    • 退出: ctrl + d 或 quit 调试命令

    • l 行号/函数名:从指定行号/函数开始打印10行 (不是输入行号/函数名从默认位置打印10行

    • break(b):打断点

     

    • info break :查看断点信息

    • disable:关闭断点
    • enable:启用断点

     

    • c :跳转到下个断点

     

    •  d 断点编号:删除断点(不可以通过行号删除)

    • r :运行程序

    • s :逐语句执行
    • n:逐过程执行

    • finish :运行至当前函数结尾

    其他指令

    • diaplay [变量名]:追踪查看变量,显示变量所有信息 
    • undisplby [变量名]:取消追踪
    • until 行号:跳转到X行
    • bt :调用堆栈
    • break 函数名:在某个函数开头设置断点
    • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
    • p 变量:打印变量值。
    • set var:修改变量的值
    • delete breakpoints:删除所有断点
    • delete breakpoints n:删除序号为n的断点
    • info(i) locals:查看当前栈帧局部变量的值

     Linux下包括软件的安装(yum)、代码编辑(vim多模式编辑器)、代码编译(gcc/g++编译器)、代码调试(gdb),自动化构建代码(make/makefile),这五种开发工具就介绍完了。每个开发工具多多少少都会有一些指令,不用可以去记忆这些指令,可以的去用指令刻意练习,慢慢就会熟练使用指令。今天的分享到这里就结束了,如果觉得文章还不错的话,可以三连支持一下,您的支持就是我前进的动力!


    下篇预告——冯诺依曼体系结构

  • 相关阅读:
    NCV7724DQBR2G车规级半桥电机驱动芯片-专为汽车,工业自动化应用提供完美解决方案
    常见仿射变换矩阵
    Enzo丨Enzo AMPIVIEW HPV 6/11 RNA探针组方案
    Linux常用命令——col命令
    <Linux>Linux高级技巧和命令(自用)
    使用DM数据迁移工具将Excel数据导入到达梦数据库
    轩逸保养手册
    常用Linux命令详细总结
    【C++】浮点数的std::fixed、std::setprecision()、std::setw()用法
    移动端的布局
  • 原文地址:https://blog.csdn.net/qq_55119554/article/details/134228477