2010-07-01 36 views
2

我想用VC++ 6.0調試一個問題。我認爲這個問題是在它被釋放後訪問一個緩衝區的東西,所以我想知道VC++調試器是否有一個漂亮的功能來監視一塊內存,並儘快嘗試訪問它。在VC++ 6.0中調試時,是否可以看到一段內存被訪問?

任何想法表示讚賞,因爲是:-)

謝謝,山姆非常簡單的指令。

回答

0

通過使用getbuffer()/setbuffer()類型的函數來限制對緩衝區的訪問。然後在這些函數的開始處的一個斷點將讓你看到調用堆棧,一旦中斷點被擊中。從這裏你可以知道控制是如何到達那裏的。

0

如果您可以控制緩衝區分配和釋放的位置,則可以使用VirtualAlloc函數(http://msdn.microsoft.com/en-us/library/aa366887%28v=VS.85%29.aspx)分配緩衝區。爲了釋放這個內存,你通常會使用VirtualFree(http://msdn.microsoft.com/en-us/library/aa366892%28v=VS.85%29.aspx),但在你的情況下,最好不要釋放緩衝區,而是使用VirtualProtect(http://msdn.microsoft.com/en-us/library/aa366898%28v=VS.85%29.aspx)來保護它。使用保護常數PAGE_NOACCESS(請參閱http://msdn.microsoft.com/en-us/library/aa366786%28v=VS.85%29.aspx)。在這次調用之後訪問頁面的每個人都會遇到訪問衝突。

當然,這個技巧假設你不使用千兆字節的緩衝區,因爲你可以用這種方式分配的頁面數量是有限的(按頁表的大小)。

0

Visual Studio可以設置breakpoints on memory。你確實需要知道有問題的內存地址,所以如果你覆蓋了堆棧,那就沒什麼幫助。

相關問題