我有一个应用程序会产生内存堆异常(损坏)。
在网上我发现了这样一句话:
"GFlags.exe: A heap debug program. Using GFlags, you can establish standard, /full, or /dlls heap options that will force the operating system to generate access violations and corruption errors when your program overwrites heap memory. "
但具体来说,我如何使用 GFlags 或 Windbg 在我的源代码中找到导致错误的行?
网上有什么好的/合成的论文吗?
最佳答案
GFlags
可以导致 Windows 中的堆管理器以不同的方式运行以帮助调试堆问题。
当与 /full
选项一起使用时,如果您访问分配的缓冲区超过其长度,您的程序将由于访问冲突而“崩溃”。
(如果没有 GFlags /full
,程序可能会继续运行,问题会在很久以后出现)
您可以使用 VS 或 WinDbg 进行即时调试或收集故障转储。
调试器现在应该指向错误(指令指针) 希望您会在源代码中找到导致错误的语句。
请注意,/full
选项会导致程序使用更多内存,因此只能用于相对较小的程序。
如果 /full
选项不会导致“崩溃”,请尝试使用 /full/backwards
。
关于c++ - 内存堆损坏和 GFlags/windbg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8711224/