c++ - 内存堆损坏和 GFlags/windbg

标签 c++ windbg

我有一个应用程序会产生内存堆异常(损坏)。

在网上我发现了这样一句话:

"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/

相关文章:

c++ - 检查 cvRect 是否在 cvMat 内

c++ - 如何继承yyFlexLexer?

windows - 如何阻止 WinDbg 缩小窗口?

windows - Windbg 和符号文件

c - 调试器: How do I get "Mutex Owned" or "Mutex Free" info in a crash dump?

c++ - 从地址查找堆或堆 block 或段

c++ - 如何从处于低功耗状态的 USB 设备获取字符串描述符?

c++ - 链表中节点赋值的概念意义

c++ - 我看到将我的类成员函数指定为内联实际上增加了执行时间,即使函数体非常小

asp.net - WinDBG 中 !clrstack 命令的输出中 GCFrame 是什么意思?