歌手投票网站怎么做,个人怎么做网站推广,wordpress修改主题header背景色,网站建设后百度找不到#x1f525;博客主页#xff1a;小王又困了
#x1f4da;系列专栏#xff1a;Linux
#x1f31f;人之为学#xff0c;不日近则日退
❤️感谢大家点赞#x1f44d;收藏⭐评论✍️ 目录
一、背景知识介绍
二、gdb指令介绍 一、背景知识介绍 在软件开发中#xff0c… 博客主页小王又困了
系列专栏Linux
人之为学不日近则日退
❤️感谢大家点赞收藏⭐评论✍️ 目录
一、背景知识介绍
二、gdb指令介绍 一、背景知识介绍 在软件开发中通常会有两种主要的构建配置Debug调试和Release发布。这两种配置的存在是为了在不同的开发和使用阶段提供不同的优化和调试支持。以下是它们存在的主要原因
调试配置
符号信息 Debug 配置通常包含完整的符号信息这使得在调试过程中能够准确地追踪到源代码的行号和调用堆栈信息。这对于开发人员在调试应用程序时非常重要。优化程度低 Debug 配置一般不进行代码优化以确保生成的代码更易于调试。变量和表达式的值通常保留在内存中而不进行过多的优化操作。
发布配置
符号信息 Release 配置通常会剔除符号信息减小可执行文件的大小并防止未经授权的人员通过符号信息获取源代码的详细信息。优化成程度高 Release 配置通常会进行更多的代码优化以提高应用程序的性能。这包括删除不必要的代码、内联函数、变量寄存器优化等。
gcc/g编译器默认是以release的模式编译得到可执行程序我们使用gdb是无法进行调试的。 想进行代码调试我们就要让代码以debug的模式发布需要加-g选项。
gcc code.c -o mycode -g 我们可以通过readelf mycode-d -S | grep debug查看mydoe-d文件中的debug信息。 二、gdb指令介绍 我会通过下面这段代码来给大家演示gdb的使用。
#include stdio.h
int Add(int n)
{int ret0;int i0;for(i0;in;i){reti;}return ret;
}int main()
{int num50;int sumAdd(num);printf(%d\n,sum);return 0;
}
进入gdb环境
gdb binFile进入gdb环境binFile是一个可执行程序。 退出gdb环境
ctrl d 或 quit 退出gdb环境
显示代码 list 或 l 显示binFile源代码接着上次的位置往下列每次列10行。 list numnum是行号将源代码的第num行在中间位置显示。 gdb会自动记录上一次执行的指令我们执行一次 list 后可以直接回车就可以看到完整的源代码。
查看函数
list Func或 l FuncFunc是函数名列出某个函数的源代码。 运行程序
run 或 r 运行程序不是单步执行程序。 设置断点
break num或b numnum表示行号在某行设置断点。 查看断点
info break查看断点信息。 删除断点
d numnum表示断点的编号删除断点。 我们在删除断点时这里的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在文件的特定行设置断点。示例
b code.c:15
在code.c这个源文件的第15行设置断点。 结语 本次的内容到这里就结束啦。希望大家阅读完可以有所收获同时也感谢各位读者三连支持。文章有问题可以在评论区留言博主一定认真认真修改以后写出更好的文章。你们的支持就是博主最大的动力。