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

sil*_*oon 19 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()被调用了这么多次?

任何指针都会非常有用.

提前致谢.

Tho*_*ler 9

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
Run Code Online (Sandbox Code Playgroud)

这里c:\symbols是要存储下载文件的路径.

  • 转到选项/配置符号...在符号路径中,输入SRV*c:\ symbols*http://msdl.microsoft.com/download/symbols (2认同)

Ant*_*ill 1

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

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