【问题标题】:clr.dll!LogHelp_TerminateOnAssert in a .NET 4.0 process.NET 4.0 进程中的 clr.dll!LogHelp_TerminateOnAssert
【发布时间】:2010-11-30 23:57:12
【问题描述】:

背景: 我正在开发一个基于 WinForm 的 .NET 4.0 桌面应用程序,该应用程序的线程和计时器很少,并且对用户控件使用了一些 GDI 处理。在我的开发过程中,我通常会查看 sysinternal 的 Process Explorer 以确保我的应用程序没有任何异常,例如 GDI 句柄或用户对象的数量等。

问题: 在使用 Process Explorer 时,我发现 Process Explorer 中我的应用程序属性的 Threads 选项卡显示了很多“clr.dll!LogHelp_TerminateOnAssert+0x58f68”条目。这是正常的吗?我认为这不是因为没有其他 .net 应用程序(我过去写过)在 Process Explorer 的属性中显示相同的条目。

什么是 LogHelp_TerminateOnAssert()? (我相信它是 clr.dll 中的一个函数)

为什么 LogHelp_TerminateOnAssert() 被调用这么多次?

任何指针都会很有帮助。

提前致谢。

【问题讨论】:

  • 我目前遇到了类似的问题,该方法在 .Net 内部引发了许多异常。目前我几乎没有什么线索可以解释为什么会这样。
  • 那么你弄清楚为什么会抛出这些异常了吗?
  • 你使用了很多线程吗?

标签: c#


【解决方案1】:

clr.dll!LogHelp_TerminateOnAssert+0x58f68

较大的数字(+58f68)表示clr.dll中的实际方法与LogHelp_TerminateOnAssert()相距甚远。您可能应该修复符号并重试以获得正确的调用堆栈。然后你就可以找出真正的方法是什么了。

它不是 LogHelp_TerminateOnAssert(),所以找出 LogHelp_TerminateOnAssert() 的作用是没有用的。

要修复符号:在 Process Explorer 中,转到 Options/Configure Symbols,然后输入

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

其中c:\symbols 是您要存储下载文件的路径。

【讨论】:

    【解决方案2】:

    您提到使用线程-由于每个线程都有自己的堆栈,因此可能在某些时候超出了默认堆栈大小,从而导致异常被 .NET 运行时捕获。你在线程中做了什么样的工作(递归、大量堆栈变量等)?

    我相信默认线程堆栈大小设置为 1MB - 尝试在线程构造函数中将堆栈大小设置为 4MB,看看错误是否仍然存在。

    【讨论】:

      猜你喜欢
      • 2011-07-08
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2011-04-26
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多