目录
前面两期我们已经学写了vim编辑器和gcc编译器,这两个工具完成了对代码的编写和编译,今天我们要学习的就是gdb工具,它完成的是对代码的调试,调试在我们日常的编码中也是十分重要的,所以学好调试,是每一个程序猿的必修课。
在使用gcc编译器编译完了代码之后,我们就要使用gdb调试器进行代码的调试,gdb的调试和vs中的调试有许多的相似之处。那么在linux中,我们如何使用gdb调试器进行调试呢?我们可以直接给gcc编译之后的代码进行调试吗?我们通过代码验证一下:?
上述代码为调试一个可执行程序的代码。?
我们发现,系统给了我们提示,说mytest这个可执行程序没有debug信息,所以我们直接给出结论,一个可执行程序要可以被调试,就必须含有debug信息。那么如果给可执行程序添加debug信息呢?代码如下:
我们通过如图2处的代码为mytest加上debug信息,通过1,3不难发现,添加玩debug信息之后,可执行程序前后的内存大小有了变化,加上debug信息之后可执行程序内存变大了一些。
l 行号:如果给定了行号,就从给定行号位置开始往下展开源代码,一次展开10行。
l函数名:列出当前函数的源代码。?
r:运行可执行程序。?
n:单条执行,不进入函数调用,类似与vs中的F10。
s:进入函数调用。类似与vs中的F11。
break 行号:为当前行设置断点。
break 函数名:为当前函数设置断点。
info break:查看断点信息。
finish:与s对应,调试完当前函数之后,直接停止调试。
continue:调试完当前函数之后,继续进行调试,知道遇到下一个断点,停止调试,如果之后没有断点,则调试至程序结束。
until 行号:比如说我们知道了某一个函数的几部分代码是不可能产生问题的,假如这个函数里面是个循环,如果一步步的进行调试最终结束调试,非常消耗时间,所以可以直接使用until直接跳转到指定行。
disable breakpoints:禁用断点,只是不想让断点起作用,不想删除断点。
enable breakpoints:启用断点 。
delete breakpoints:删除所有断点。
delete breakpoints n:删除序号为n的断点。
注意:这里删除的也是断点前的序号,而不是断点所处的行号。?
display 变量名:跟踪查看某一个变量的值,每一次停止调试都查看这个变量。
undisplay 序号:取消对当前变量的跟踪。
取消跟踪前:
取消跟踪代码:
注意:undisplay后跟的是跟踪变量前所显示的1,2,3序号,而不是变量名称,这点需要注意。?
取消跟踪之后:
?
p变量:打印变量的值。
quit:退出调试。
以上便是所有gdb调试相关的所有重点指令。
本期内容到此结束^_^?