2010-03-24 76 views
0

我正在用GDB調試一個易於編程的C++程序。需要10分鐘才能到達要調試的有趣功能。然後我檢查變量,理解程序的一部分並重新編譯,然後再次運行GDB,直到我再次達到該點。是否有可能加速使用GDB進行調試?

這個程序有時會有點費時。我想知道能不能加速。有任何想法嗎?

感謝

+1

聽起來像你需要一個單元測試或兩個 – 2010-03-24 14:39:33

+2

即使這只是你試圖工作一次然後忘記的東西,即使你不需要一個完整的測試套件,你仍然可以使用單元測試模型 - 只需編寫一個額外的程序來運行該函數(可能使用先前運行的其他程序的存儲輸入)。 – Cascabel 2010-03-24 14:42:32

回答

4

你一定不能有你的編譯器優化代碼,使其運行在運行GDB以前更快。你有沒有寫好單元測試?擁有一個體面的測試套件可能會爲您節省相當多的時間,並防止您在調試器中花費過多的金額。

+0

非常感謝。你能給我一個關於C++初學者的一些好的單元測試tuotrial的鏈接嗎?謝謝 – flow 2010-03-24 21:09:44

+0

請參閱http://code.google.com/p/googletest/wiki/GoogleTestPrimer上的Google C++測試框架入門或Boost測試庫文檔http://www.boost.org/ DOC /庫/ 1_42_0 /庫/測試/ DOC/HTML/index.html的。他們應該給你一個做什麼的總體想法。 – BenTrofatter 2010-03-25 05:45:02

1

有GDB罐頭指令(一種在這裏你自動化調試過程minilanguage的)。還有一些可以幫助你自動化gdb的python綁定。調試應該是最後的手段,您應該編寫測試,或者更多地考慮您寫的內容,這會大大加速解除過程(因爲您可能不需要再調試,或者很少)。

1

編寫用各種輸入運行有趣功能的測試。然後,您可以調試該函數,而無需擔心其他代碼。

0

你試過UndoDB:http://undo-software.com/

它可以讓你一步來回 - 可逆調試。儘管gdb目前擁有自己的可逆調試功能,但在該模式下運行的速度卻非常緩慢 - 20,000x甚至更低。 UndoDB將以大約1.7倍的速度運行,所以你可以快速地進入有趣的部分,然後來回回顧你的bug。

(披露:我對撤消軟件工作)

0

GNU/Linux下,你也可以嘗試:

checkpoint 
... 
restore n 

如果你的程序不是多線程(checkpoint內部使用fork(),所以同樣的侷限性應用)。

應該同你10分鐘,你需要達到你調試的開始!

相關問題