clr.dll! LogHelp_TerminateOnAssert в процессе .NET 4.0 - PullRequest
19 голосов
/ 01 декабря 2010

Справочная информация: Я работаю над настольным приложением .NET 4.0 на основе WinForm, которое имеет несколько потоков и таймеров и использует некоторую обработку GDI для пользовательских элементов управления.Во время разработки я обычно заглядываю в sysinternal Process Explorer, чтобы убедиться, что в моем приложении нет ничего необычного, например, количество дескрипторов GDI или пользовательских объектов и т. Д.

Проблема: При использованииProcess Explorer, я обнаружил, что вкладка Threads для свойства моего приложения в Process Explorer показывает много и много записей "clr.dll! LogHelp_TerminateOnAssert + 0x58f68".Это нормально?Я думаю, что это не потому, что ни одно из других приложений .net (которое я написал в прошлом) показывает ту же запись в своих свойствах в Process Explorer.

Что такое LogHelp_TerminateOnAssert ()?(Я считаю, что это функция в clr.dll)

Почему LogHelp_TerminateOnAssert () вызывается так много раз?

Любые указатели будут очень полезны.

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 03 июля 2012

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 голос
/ 06 сентября 2011

Вы упоминаете об использовании потоков - поскольку каждый поток получает свой собственный стек, возможно, в какой-то момент размер стека по умолчанию превышен, что вызывает исключение, которое затем перехватывается средой выполнения .NET.Какую работу вы выполняете в потоках (рекурсия, множество переменных стека и т. Д.)?

Я считаю, что размер стека потока по умолчанию установлен равным 1 МБ - попробуйте установить размер стека равным 4 МБ в конструкторе потоков ипосмотрите, если ошибка не исчезла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...