【问题标题】:How do I turn off the fault tolerant heap?如何关闭容错堆?
【发布时间】:2011-06-28 13:42:20
【问题描述】:

我最近在启动我的应用程序时开始在 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 fthsvc.dll,FthSysprepSpecialize”命令-bit 和 64 位版本的 Rundll32.exe。

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

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

是否有人对如何禁用容错堆有任何其他建议?

【问题讨论】:

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


    【解决方案1】:

    【讨论】:

    • 非常感谢您的回答。不幸的是,按照您的建议修改应用程序清单并重置 PCA 没有任何区别。
    【解决方案2】:

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

    【讨论】:

    • 我必须删除并重新编译我的 exe 文件才能正常工作。
    • @DonaldDuck 删除 exe 对我不起作用(Windows 10)。我不得不重命名它。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      如前所述:

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

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

      【讨论】:

        【解决方案5】:

        为单个应用程序禁用它

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

        来自here(实际上是here

        【讨论】:

        • 这个解决方案对我有用,但我只需要删除 HKEY_LOCAL_MACHINE 的 FTH。
        • 这只会在启用后将其关闭。它不会阻止它再次启用,这是真正需要的......
        【解决方案6】:

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

        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\ExclusionList
        

        为我工作。

        【讨论】:

        • 这个解决方案对我不起作用。您是否添加了可执行文件的整个路径?还是只是可执行文件名?
        • @AngieQuijano 一开始它对我也不起作用,但是当我删除并重新编译我的 exe 文件时它起作用了(重新编译它不起作用,我不得不删除它) .
        • @DonaldDuck 删除 exe 对我不起作用(Windows 10)。我不得不重命名它。
        【解决方案7】:

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

        但我必须遵循以下说明:

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

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

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

              【解决方案10】:

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

              Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH
              

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

              Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\State
              

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

              Rundll32.exe fthsvc.dll,FthSysprepSpecialize
              

              你可能需要重启你的机器

              【讨论】:

                猜你喜欢
                • 2013-04-21
                • 2012-01-03
                • 2021-01-10
                • 2011-12-05
                • 2014-02-06
                • 1970-01-01
                • 2014-04-28
                • 1970-01-01
                • 2018-06-27
                相关资源
                最近更新 更多