如何关闭容错堆?

时间:2011-02-16 18:16:57

标签: windows-7 heap fault-tolerant-heap

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

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

我正在运行Windows 7 64位版本,因此我对32位和64位注册表进行了更改,并使用32运行“Rundll32.exe fthsvc.dll,FthSysprepSpecialize”命令-bit和64位版本的Rundll32.exe。

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

这是一个真正的问题,因为它掩盖了我试图重现的错误,并且还会杀死性能。

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

10 个答案:

答案 0 :(得分:36)

为单个应用程序禁用它

  

转到HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER版本   软件\微软\的Windows   NT \ CurrentVersion \ AppCompatFlags \ Layers \ your_application.exe和   删除FaultTolerantHeap条目。

来自here(实际上here

答案 1 :(得分:5)

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

答案 2 :(得分:4)

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\ExclusionList

适合我。

答案 3 :(得分:2)

答案 4 :(得分:1)

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

如上所述:

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

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

答案 5 :(得分:0)

也碰到了这个。在Windows \ AppPatch中重命名/删除AcXtrnal.dll似乎对我有用。我喜欢微软推荐的行动(我先做的)没有做任何事情。

答案 6 :(得分:0)

我还必须重命名该文件,因为与此密钥关联的注册表项没有适用的数据。如果你有一个行为不端的申请,我希望他们能够入住。但在我的情况下,我在Visual Studio中调试我自己的应用程序。所以在这种情况下,我的流程是以某种方式加载FTH,无论FTH服务是否正在运行。事实上,我没有列出以前标记为行为不端的应用程序。

但我必须遵循这些指示:

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

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

答案 7 :(得分:0)

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

要使其重新工作,我必须删除测试用例,重新编译并再次添加并重新编译,然后才能设置断点并进入测试。

答案 8 :(得分:0)

您可以按照以下步骤清除FTH跟踪的应用程序列表,而无需停止该服务:

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

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

答案 9 :(得分:0)

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

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH

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

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\State

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

Rundll32.exe fthsvc.dll,FthSysprepSpecialize

您可能需要重新启动计算机