『Linux升级路』基础开发工具——gdb篇

🔥博客主页:小王又困了

📚系列专栏:Linux

🌟人之为学,不日近则日退

❤️感谢大家点赞👍收藏⭐评论✍️

目录

一、背景知识介绍

二、gdb指令介绍


一、背景知识介绍

在软件开发中,通常会有两种主要的构建配置:Debug(调试)和Release(发布)。这两种配置的存在是为了在不同的开发和使用阶段提供不同的优化和调试支持。以下是它们存在的主要原因:

📝调试配置:

  • 符号信息: Debug 配置通常包含完整的符号信息,这使得在调试过程中能够准确地追踪到源代码的行号和调用堆栈信息。这对于开发人员在调试应用程序时非常重要。
  • 优化程度低: Debug 配置一般不进行代码优化,以确保生成的代码更易于调试。变量和表达式的值通常保留在内存中,而不进行过多的优化操作。

📝发布配置:

  • 符号信息: Release 配置通常会剔除符号信息,减小可执行文件的大小,并防止未经授权的人员通过符号信息获取源代码的详细信息。
  • 优化成程度高: Release 配置通常会进行更多的代码优化,以提高应用程序的性能。这包括删除不必要的代码、内联函数、变量寄存器优化等。

gcc/g++编译器默认是以release的模式编译得到可执行程序,我们使用gdb是无法进行调试的。

想进行代码调试,我们就要让代码以debug的模式发布,需要加-g选项。

cpp 复制代码
gcc code.c -o mycode -g

我们可以通过readelf mycode-d -S | grep debug查看mydoe-d文件中的debug信息。

二、gdb指令介绍

我会通过下面这段代码,来给大家演示gdb的使用。

cpp 复制代码
#include <stdio.h>
int Add(int n)
{
    int ret=0;
    int i=0;
    for(i=0;i<n;i++)
    {
        ret+=i;
    }
    return ret;
}

int main()
{
    int num=50;
    int sum=Add(num);
    printf("%d\n",sum);
    return 0;
}

📒进入gdb环境

  • gdb binFile:进入gdb环境,binFile是一个可执行程序。

📒退出gdb环境:

  • ctrl + d 或 quit :退出gdb环境

📒显示代码:

  • list 或 l :显示binFile源代码,接着上次的位置往下列,每次列10行。
  • list num:num是行号,将源代码的第num行在中间位置显示。

gdb会自动记录上一次执行的指令,我们执行一次 list 后,可以直接回车,就可以看到完整的源代码。

📒查看函数:

  • list Func或 l Func:Func是函数名,列出某个函数的源代码。

📒运行程序:

  • run 或 r :运行程序,不是单步执行程序。

📒设置断点:

  • break num或b num:num表示行号,在某行设置断点。

📒查看断点:

  • info break:查看断点信息。

📒删除断点:

  • d num:num表示断点的编号,删除断点。

我们在删除断点时,这里的num表示的不是行号,我们要输入要删除断点的编号。

注意: 如果在调试过程中退出,那么再次进入调试环境,上一次的调试信息会丢失,即之前设置的断点都没了。

📒单步执行:

  • n 或next:逐过程,单条执行,当有函数调用时,不会进入函数内部。
  • s 或step:逐语句,进入函数调用。
  • finish:跳出当前函数,执行完当前函数返回,然后停下来等待命令。

flish指令可以快速的帮我们查看问题是不是出在当前函数中。

📒查看变量的值:

  • p 变量:打印变量的值。
  • display 变量:跟踪查看一个变量,每次停下来都显示它的值。
  • undisplay num:取消对先前设置的那些变量的追踪,其中num是先前设置的跟踪变量所对应的编号。
  • info locals:查看当前函数栈帧中所有局部变量的值。

📒其他指令:

  • until x:跳至x行,可以让我们快速的运行代码块。
  • c 或continue:继续执行直到下一个断点。
  • disable breakpoints:禁用断点。
  • enable breakpoints:启用断点
  • break 函数名:在函数开头设置断点。
  • backtrace:查看堆栈。
  • set var:修改变量的值。
  • break filename:line_number:在文件的特定行设置断点。示例:
cpp 复制代码
b code.c:15

在code.c这个源文件的第15行设置断点。


🎁结语:

本次的内容到这里就结束啦。希望大家阅读完可以有所收获,同时也感谢各位读者三连支持。文章有问题可以在评论区留言,博主一定认真认真修改,以后写出更好的文章。你们的支持就是博主最大的动力。

相关推荐
Chengbei11几秒前
VMware Workstation Pro 26H1免费虚拟化利器
运维·安全·web安全·自动化·系统安全·apache·安全架构
老约家的可汗3 分钟前
Linux中基础IO
linux·服务器·算法
daad7776 分钟前
记录ssh远程查看对端的摄像头显示
运维·ssh
七夜zippoe22 分钟前
DolphinDB告警分析:告警统计与趋势
运维·服务器·统计·告警·趋势·dolphindb
渡我白衣24 分钟前
打印宏与socket模块设计
java·linux·开发语言·c++·ide·人工智能·eclipse
程序员老油条26 分钟前
用 n8n 自建自动化:GitHub Push 后自动部署到服务器
服务器·自动化·github
pt104330 分钟前
思科网络自动化入门课程介绍
运维·网络·自动化
AI创界者32 分钟前
打造内网安全防线:使用 Kali Linux 进行企业级漏洞风险自查与防御指南
linux·运维·安全
weixin_4398575443 分钟前
在Ubuntu 26.04版本上借助本地AI助手在AMD显卡基础上安装并运行Qwen3.6-35B-A3B,作为本地编程AI
linux·人工智能·ubuntu
数字新视界1 小时前
档案库房环境安全监控解决方案
大数据·运维·数据库·物联网·环境监控系统