clr.dll!LogHelp_TerminateOnAssert在.NET 4.0进程中

时间:2010-11-30 23:57:13

标签: c#-4.0

背景 我正在开发基于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()被调用了这么多次?

任何指针都会非常有用。

提前致谢。

2 个答案:

答案 0 :(得分:8)

  

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是您要存储下载文件的路径。

答案 1 :(得分:1)

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

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