45

我最近在启动我的应用程序时开始在我的 Visual Studio 2005 输出窗口中看到这一行:
FTH: (7156): *** 容错堆 shim 应用于当前进程。这通常是由于以前的崩溃造成的。***

我尝试使用此处的说明关闭容错堆:http:
//msdn.microsoft.com/en-us/library/dd744764 (VS.85).aspx

我正在运行 Windows 7 64 位版本,因此我对 32 位和 64 位注册表进行了更改,并使用 32 位和Rundll32.exe 的 64 位版本。

但是,重新启动后,在尝试调试我的应用程序时,我仍然会得到容错堆!

这是一个真正的问题,因为它掩盖了我试图重现的错误,而且它也会降低性能。

有没有人有任何其他建议如何禁用容错堆?

4

10 回答 10

45

To disable it for a single application

Go to the HKEY_LOCAL_MACHINE and HKEY_CURRENT_USER versions of Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\your_application.exe and delete the Fault­Tolerant­Heap entry.

From here (actually here)

于 2012-01-25T21:31:05.327 回答
7

将此注册表值设置为0HKEY_LOCAL_MACHINE\Software\Microsoft\FTH\Enabled

于 2011-05-10T20:16:28.520 回答
5

您可以将可执行文件的名称添加到 ExclusionList。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\ExclusionList

为我工作。

于 2012-08-27T08:12:09.517 回答
2

您可以编辑应用程序清单从 PCA 中排除您的程序

另请参阅:如何重置程序兼容性助手以进行测试

于 2011-02-16T23:47:20.447 回答
2

您可以按照以下步骤在不停止此服务的情况下清除 FTH 跟踪的应用程序列表:

  1. 单击开始菜单。
  2. 右键单击计算机,然后单击管理。
  3. 单击事件查看器 -> 应用程序和服务日志 -> Microsoft -> Windows -> 容错堆。
  4. 查看 FTH 事件。

你会发现文件名为operating通过右键单击并选择清除日志,然后你可以再次运行你的程序,警告消息将消失,它与我一起工作而无需重新启动操作系统。

于 2019-02-04T21:36:17.667 回答
2

在 Windows 10 上,注册表位置是:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH

您可以从以下列表中删除您的可执行文件:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\State

或者您可以从提升的命令提示符运行此命令

Rundll32.exe fthsvc.dll,FthSysprepSpecialize

您可能需要重新启动机器

于 2020-11-19T14:40:19.250 回答
1

“Rundll32.exe fthsvc.dll,FthSysprepSpecialize”看起来只清除当前标记的应用程序列表。如果您的应用程序仍然导致异常,FTH 仍应介入并接管。

如前所述:

将此注册表值设置为 0:HKEY_LOCAL_MACHINE\Software\Microsoft\FTH\Enabled

这应该禁用整个系统的 FTH。

于 2011-07-18T14:26:10.143 回答
0

也碰到了这个。在 Windows\AppPatch 中重命名/删除 AcXtrnal.dll 似乎对我有用。我喜欢微软推荐的这个动作(我首先做了)什么都不做。

于 2011-07-13T02:03:42.163 回答
0

我还必须重命名该文件,因为与此键关联的注册表项没有适用的数据。如果您有一个行为不端的应用程序,我希望它们会填充。但就我而言,我是在 Visual Studio 中调试自己的应用程序。因此,在这种情况下,无论 FTH 服务是否正在运行,都是我的进程以某种方式加载了 FTH。事实上,我没有列出之前被标记为行为不端的应用程序。

但我必须遵循以下说明:

http://billroper.livejournal.com/960825.html

因为在我获得所有权并确保我拥有完全控制权之前,它不会让我重命名文件。

于 2013-04-19T16:40:12.697 回答
0

使用 (Microsoft::VisualStudio::CppUnitTestFramework) 运行单元测试时,我遇到了类似的问题。不知何故,我违反了一些堆分配,下次我尝试调试时收到消息:“容错堆 shim 应用于当前进程。这通常是由于以前的崩溃造成的。”调试环境冻结了。

为了让它再次工作,我必须删除测试用例,重新编译并再次添加并重新编译,然后我可以设置断点并进入测试。

于 2018-08-24T08:40:39.207 回答