2012-01-03 126 views
0

我有一個應用程序產生內存堆異常(腐敗)。內存堆損壞和GFlags/windbg

在網絡上,我發現這樣一句話:

「GFlags.exe:堆調試程序使用GFlags,你可以建立 標準,/滿,或/ DLL的堆選擇,將強制操作 系統生成訪問衝突和腐敗的錯誤,當你 程序覆蓋堆內存。「

但具體如何我可以GFlags在或WinDBG的發現導致了錯誤我的源代碼行?

網絡上有沒有好的/合成的紙張?

回答

2

GFlags會導致Windows中的堆管理器行爲不同,以幫助調試堆問題。

與/ full選項一起使用時,如果您訪問超過其長度的已分配緩衝區,則由於訪問衝突,您的程序將「崩潰」。

(沒有GFlags/full,程序可能會繼續,問題出現得太晚) 您可以及時使用VS或windbg進行調試或收集故障轉儲。

調試器現在應該指向錯誤(指令指針) ,並且希望您會在源代碼中找到導致錯誤的語句。

請注意,/ full選項會導致程序使用更多的內存,因此只能用於相對較小的程序。 如果/ full選項不會導致「崩潰」,請嘗試使用/ full/backwards

+0

您會看到IP via!analyze -v例如? – Guillaume07 2012-01-03 13:27:29

+0

是的,源代碼和.prd可用,你也可以看到一個源代碼的sniplet。但是,如果錯誤是由f.eks memcpy的非法參數引起的,則必須將堆棧轉回您的代碼。 – 2012-01-03 21:48:54