2011-05-24 64 views
5

我正在調試(在Visual Studio 2008中)我用C++編寫的實用程序。將大量輸入文件與慢速機器結合起來,可能需要6個小時才能到達需要監視程序執行不規則情況的地步。保存程序狀態(visual studio 2008)

我可能在這裏抓住了吸管,但是有人知道Visual Studio中的功能或插件或其他東西,或者我可以保存程序執行狀態的東西,這樣我就可以繞過花費的時間來獲取我在哪裏需要?

+0

我希望你聽說過[單元測試](http://en.wikipedia.org/wiki/Unit_testing)?當然是 – Xeo 2011-05-24 15:14:56

+0

。處理自我強加的測試用例以測試功能和1.8個演唱會值得的實時數據是兩個獨立的野獸 – basil 2011-05-24 15:38:52

回答

5

我不確定在Visual Studio中做這樣的事情的可能性,但是如果你找不到任何東西,我會嘗試使用虛擬機並保存機器的狀態。 它可能會非常緩慢,但從長遠來看可能會有所幫助。 好運

+1

這個想法並不是壞的,我認爲它儘可能地接近「保存程序狀態」。 – Xeo 2011-05-24 16:16:23

-1

你需要的是一個conditional breakpoint ......看到這個網址瞭解詳情:

http://msdn.microsoft.com/en-us/library/7sye83ce%28v=VS.90%29.aspx

的想法是,你知道什麼條件都滿足的斷點變得有效,則當這些條件成立時,斷點將觸發,暫停執行。然後,您可以在早上過來,開始逐步完成代碼。

如果DO必須要引起斷你可以把一個綱領性的破發點的DebugBreak(),這將導致拋出一個破發點的異常精確的點。 Visual Studio調試器將捕獲它並暫停執行。

或者,啓用gflagsADPlus運行程序,並且在您認爲導致問題拋出異常的代碼點處未處理。讓程序崩潰並且ADPlus將生成進程內存的完整崩潰轉儲。啓用gflags的事實意味着您將獲得內存分配,並在其周圍有很好的邊界(通常爲0xCDCDCDCD)以便於調試。

最後,您還可以使用Microsoft的DbgHelp.dlllibrary來生成一個小型轉儲,它可以以編程方式捕獲各種級別的信息(不會因爲上述解決方案而崩潰)。你想要的功能是MiniDumpWriteDump。您可以使用這些參數編寫普通的小型轉儲或完整的內存轉儲。如果可能的話,這應該從一個單獨的過程完成(您可以在自己的過程中等待句柄)。

+0

這就是我現在正在做的事情。深夜開始執行,當我進入辦公室時檢查它。再次啓動,等待並做其他事情,在一天結束時再次檢查,然後啓動並稍後在家中遠程檢查並重復該過程。 – basil 2011-05-24 15:41:07

+2

雖然條件斷點使執行速度減慢了一個數量級,但這6小時可能會變成24,但有一點不利之處。如果您在代碼中有一個特定的點,在達到某個條件時需要附加該點,那麼我認爲它是最好放一個while(true)sleep();'輸入循環,這樣當你在早上進入 – 2011-05-24 16:26:32

+0

@basil時,如果你有一個確切的點,你想引起一個你可以放入一個程序化的斷點'DebugBreak()',這會引發一個斷點異常。Visual Studio調試器將捕獲它並暫停執行。 – Dennis 2011-05-24 16:33:59