作为程序员,调试是一项很重要的基本功。调试的技巧和水平,直接决定了解决问题的时间。一般情况下,GDB的基本命令已经足以应付大多数问题了。但是,对于有些问题,还是需要更高级一些的命令。今天给大家介绍GDB功能十分强大的三个调试技巧。checkpoint、condition和ignore。一,checkpoint有一些bug,可能很难复现,当好不容易复现一次,且刚刚进入程序的入口时,我们需要珍惜这个来之不易的机会。如果只使用基本命令的话,对于大部分代码,我们都需要使用step来步进。这样无疑会耗费大量的时间,因为大部分的代码可能都没有问题。可是一旦不小心使用next,结果恰好该语句的函数调用返回出错。那么对于这次来之不易的机会,我们只得到了部分信息,即确定问题出在该函数,但是哪里出错还是不清楚。于是还需要再一次的复现bug,时间就这样浪费了。对于这种问题,是checkpoint大显身手的时候了。checkpoint可以看做程序在那一刻的快照,当我们发现错过了某个调试机会时,可以再次回到checkpoint保存的那个程序状态。checkpoint的用法很简单,但是很有用。就是在平时的简单的bug修正中,也可以加快我们的调试速度——毕竟减少了不必要的重现bug的时间。二,condition调试程序时,程序中如果包含循环调用,但想观察循环中间,此时condition就很有用了,可以根据条件来停止当前的断点。这个功能很强大,可以在我们设置的条件成立时,自动停止当前的程序,先使用break(或者watch也可以)设置断点,然后用condition来修改这个断点的停止(就是断)的条件。使用方法很简单,如下:condition 修改当前的断点停止条件为expression为真值condition 清楚断点号的停止条件,这样就是一般的断点了。如,我们想在断点号为1处,参数args的值为root时才停止(断点才断),可以设置如下:condition 1 args="root"。然后如果想清除这个条件,可以这样condition 1三,ignore如果我们不是想根据某一条件表达式来停止,而是想断点自动忽略前面多少次的停止,从某一次开始才停止,这时ignore就很有用了。ignore break_number count上面的命令行表示break_number所指定的断点号将被忽略count次。如:ignore 1 100,表示忽略断点1的前100次停止。
声明:本站所有内容,如无特殊说明或标注,均为本站原创或通过网络收集整理并发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。