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?