在VC ++ 6.0中调试时是否可以查看何时访问内存?

时间:2010-07-01 11:22:00

标签: debugging visual-c++ memory

我正在尝试使用VC ++ 6.0调试问题。我认为这个问题是在它被释放后访问缓冲区的问题,所以我想知道VC ++调试器是否有一个很好的功能来监视内存块并在某些东西试图访问它时立即中断。

任何想法都赞赏,非常简单的说明: - )

谢谢,山姆。

4 个答案:

答案 0 :(得分:0)

我不知道Visual Studio,但我知道IDA反汇编程序中有这样的功能。 http://www.hex-rays.com/idapro/idadown.htm这是很棒的应用程序。

答案 1 :(得分:0)

通过getbuffer()/setbuffer()类型函数限制对缓冲区的访问。然后,在这些函数开始处的断点将让您在达到断点时看到调用堆栈。从这里你可以知道控制是如何到达那里的。

答案 2 :(得分: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)。在此次通话后访问该页面的每个人都将获得访问冲突。

当然,这个技巧假定您不使用千兆字节的缓冲区,因为您可以通过这种方式分配的页数是有限的(按页面表的大小)。

答案 3 :(得分:0)