1、 GDB调试技
在谈这个问题前我们有没有遇到过这种场景,每次要改动一次代码,然后make,之后gdb调试,然后出gdb中quit,再次改动再次make再次gdb进入再次quit一直反复着一个工作。那有没有方法能够避免这种反复事情呢?毕竟程序猿对这种反复的步骤非常反感。
避免的方法例如以下:在我们对代码改动和编译时另外开一个窗体,这个窗体专门用来改动和编译。GDB调试窗体不要关闭。当在gdb命令行以下输入run(r)命令时。gdb可以又一次载入新编译的程序。
这时里面设置的断点都还存在,这里的断点不包含暂时断点,这你是知道的。仅仅是有所偏差,为什么有偏差,是由于之前设置的断点的行号还是曾经的行号,可是如今代码有可能加入了很多。这样就造成一定的偏差。
在实际项目中。一个项目不可能一天就能完毕,有时电脑还是要关机,关机可能是主动,也可能是被动。
这样重新启动之后之前设置的断点都会消失,这时我们能够将我们归纳的调试所有写进.gdbinit文件里,这个文件的位置已经在前面介绍过,不记得的能够翻阅前面的文章。
2、清除断点或监视点
删除断点或监视点能够使用delete命令,命令格式例如以下:
deletebreakpoint-list
delete不加參数是删除全部的断点。可是须要确认,以避免你是误操作,假设不须要确认。则须要在.gdbinit启用文件里写入set confirmoff关闭确认功能。
clear命令:清楚gdb将运行的下一个命令处的断点,这样的方法使用与要删除gdb已经到达的断点除的情况。
使用方式例如以下:
clear function、filename:function、line-number和filename:line-number。每一个断点都能够被启用或禁止。
仅仅有当GDB遇到启用的断点时,才会暂停程序的运行,它会忽略禁止的断点。
3、禁止和启用断点
disable breakpoint-list命令来禁用断点。使用enable breakpoint-list命令来启用断点,breakpoint-list使用空格分隔符的列表。
不带不论什么參数地运行disable命令将禁止全部断点。不带不论什么參数的enable命令将启用全部断点。enable once命令是启用一次,运行一次后将会处于禁止状态。
所以断点的部署分为三个状态:keep(保持)、del(删除)和dis(禁用)。
4、next和step命令
next称为单步越过,step是单步进入。next(n)命令运行函数,不会在当中暂停,也就是不会进入函数体的内部。这个命令和step(s)命令都是单步调试。可是s命令会进入函数的内部。
如:
a = 5;
b = 10;
result = add(a,b);
printf(“%d\n”, result);
假设是next进行调试,next不会进入add函数。它会暂停在printf语句处,假设使用step命令,则会暂停在add函数的第一条语句。
nextcount相当于单独运行了count次next命令,而continue count的意思是忽略接下来的count个断点。
5、finish命令
fin 命令:指示GDB恢复运行,知道恰好在当前桟帧完毕之后为止,恰当函数返回之后为止。
6、until命令
until恢复程序运行,until命令(u)通经常使用来在不进一步在循环中暂停的情况下完毕正在运行的循环。使用方法例如以下:
until count、until function、until filename:line-number、until filename:function