GDB技巧:使用checkpoint解决难以复现的Bug
生活随笔
收集整理的这篇文章主要介绍了
GDB技巧:使用checkpoint解决难以复现的Bug
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
作者:gfree.wind@gmail.com
博客:linuxfocus.blog.chinaunix.net
作为程序员,调试是一项很重要的基本功。调试的技巧和水平,直接决定了解决问题的时间。一般情况下,GDB的基本命令已经足以应付大多数问题了。但是,对于有些问题,还是需要更高级一些的命令。今天介绍一下checkpoint。
有一些bug,可能很难复现,当好不容易复现一次,且刚刚进入程序的入口时,我们需要珍惜这个来之不易的机会。如果只使用基本命令的话,对于大部分代码,我们都需要使用step来步进。这样无疑会耗费大量的时间,因为大部分的代码可能都没有问题。可是一旦不小心使用next,结果恰好该语句的函数调用返回出错。那么对于这次来之不易的机会,我们只得到了部分信息,即确定问题出在该函数,但是哪里出错还是不清楚。于是还需要再一次的复现bug,时间就这样浪费了。
所以,对于这种问题,就是checkpoint大显身手的时候。先看一下GDB关于checkpoint的说明: On certain operating system(Currently, only GNU/Linux), GDB is able to save a snapshot of a program's state, called a checkpoint and come back to it later. Returning to a checkpoint effectively undoes everything that has happened in the program since the checkpoint was saved. This includes changes in memory, register, and even(within some limits) system state. Effectively, it is like going back in time to the moment when the checkpoint was saved. 也就是说checkpoint是程序在那一刻的快照,当我们发现错过了某个调试机会时,可以再次回到checkpoint保存的那个程序状态。
举例说明一下:
ok,使用checkpoint恢复
从上面可以看出checkpoint的用法很简单,但是很有用。就是在平时的简单的bug修正中,也可以加快我们的调试速度——毕竟减少了不必要的重现bug的时间。
转载于:https://blog.51cto.com/tonghuix/1165828
总结
以上是生活随笔为你收集整理的GDB技巧:使用checkpoint解决难以复现的Bug的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: HTML5 Canvas 高仿逼真 3D
- 下一篇: 什么是CouchDB?