问题标签 [pageheap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
debugging - 页面堆不记录有用的堆栈信息?
我正在尝试使用普通页面堆(未满)测试崩溃场景(在隔离的测试应用程序中)。
我已经设置了标志
我正在用一个元素覆盖一个整数缓冲区
事实上,当向量 d'tor 中的块被释放时,我得到了休息。正确报告了中断的调用堆栈:
但是,当我查看错误分配时,我只得到:
也就是说,有一个分配堆栈跟踪,但它停止在RtlAllocateHeap
这显然完全没用。
查看内存中的堆栈跟踪:
看来实际上没有更多的记录了。
如何修复页面堆以记录有用的堆栈跟踪?
请注意,Test 项目不是使用 FPO (/Oy) 编译的,我没想到RtlAllocateHeap
会受到 FPO 的影响?
更新:我通过手动进入分配检查了相关调用的 FPO 特性(见下文),看起来VC80(VS2005)运行时库malloc
和op new
VC80(VS2005)运行时库都启用了某种形式的 FPO ......所以也许这弄乱了页堆的堆栈数据库的堆栈跟踪。
c++ - 如何创建随机内存分配失败?
我最近发现了一个 Windows 调试工具PageHeap。它的选项/fault允许每隔一段时间注入内存分配失败。就像,我希望每 100 或 1000 次分配失败,你决定。我们在linux上有类似的东西吗?
我可以想到 ulimit,但这不是一回事,一旦达到内存,它会使每个后续分配失败,而不仅仅是一个。
com - 使用 SHGFI_ICON 时 SHGetFileInfo 导致堆损坏
当我为正在测试的进程启用页面堆时,它会触发访问冲突,这表明在调用 SHGetFileInfo 时发生了某种类型的堆损坏。
调用堆栈的顶部显示 msvcr90!wcspbrk 并向下显示 ole32 中与 COM 相关的项目,直到到达 shell32,我们调用 SHGetFileInfo。
从我在网上发现的情况来看,使用 shell32 的一个常见问题是没有首先调用 CoInitialize/CoInitializeEx,但此时已经调用了 CoInitializeEx(),并且在下面的代码之前立即调用它只会返回 S_FALSE。
下面的代码在我们的 DLL 中,它是从 .NET 调用的(代码用于检索用于特定文件的图标):
(其中 logfile.txt 是我根驱动器上的随机文本文件)
为简单起见,我已将第一个参数硬编码到我机器上的文件中。
我使用的是 64 位 Windows 操作系统,但代码在 32 位上下文中运行。如果我使用 SHGetFileInfo 的窄版本,我会得到相同的结果。
如果我为我的进程禁用页面堆,则没有问题。
当我不使用标志 SHGFI_ICON 时,问题不会发生。
编辑:@HansPassant 要求我添加一个可复制的示例,这是一个指向 Visual Studio 2010 Win32 控制台应用程序的链接,演示了该问题:示例
c++ - Visual Studio 2015 中的调试缓慢——无法关闭页堆?
我正在运行 Visual Studio 2015,之前从未遇到过调试问题。但是,最近调试很慢。我还开始收到来自 Microsoft Visual C++ 运行时库的堆调试错误,说“检测到堆损坏”。我将修复应用程序在堆缓冲区结束后写入内存的错误,但即使我没有运行引发这些错误的代码,调试器也非常慢。我认为有一些堆检查设置,我想将其关闭。
调试输出窗口顶部有两行,每行都说Page heap: pid 0x530: page heap enabled with flags 0x2.
我相信这是问题的根源,或者至少是相关的。我无法关闭页堆。我在 gflags GUI 中尝试过(没有检查任何内容,但我尝试检查和取消检查),并在命令行上尝试过。重新启动VS,重新启动我的电脑,卸载并重新安装VS......没有任何效果。
当我在 VS 中运行发布配置时,它仍然很慢,并且我仍然在输出窗口顶部看到页面堆消息。但是,应用程序并没有收到堆调试错误消息,而是冻结了。但是页面堆消息让我认为这是 VS 之外的问题,与我的调试配置无关。
编辑:我正在使用 wxWidgets 3.1,我注意到我的程序在 wxWidgets 相关事件期间运行最慢,例如打开文件或将多行输出到 textCtrl。不确定这是否相关。