我最近在启动应用程序时在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。
但是,在重新启动后,我仍然在尝试调试应用程序时获得容错堆!
这是一个真正的问题,因为它掩盖了我试图重现的错误,并且还会杀死性能。
有没有人有任何其他建议如何禁用容错堆?
答案 0 :(得分:36)
为单个应用程序禁用它
转到HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER版本 软件\微软\的Windows NT \ CurrentVersion \ AppCompatFlags \ Layers \ your_application.exe和 删除FaultTolerantHeap条目。
答案 1 :(得分:5)
将此注册表值设置为0
:
HKEY_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跟踪的应用程序列表,而无需停止该服务:
您将通过右键单击找到名为“可操作”的文件,然后选择“清除日志”, 然后您可以再次运行程序,警告消息将消失, 它与我一起工作,而无需重新启动操作系统。
答案 9 :(得分:0)
在Windows 10上,注册表位置为:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH
您可以从以下列表中删除可执行文件:
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\State
或者您可以在提升的命令提示符下运行此命令
Rundll32.exe fthsvc.dll,FthSysprepSpecialize
您可能需要重新启动计算机