Я всегда считал себя достаточно опытным с захватом свалки, но этот меня действительно смутил. У меня есть процесс .net, который периодически сбой ... Я не знаю, на что он врезался, независимо от того, сбой в собственном или управляемом коде или даже сам ли этот процесс попадает в исключение или в стороннюю DLL. Все, что я знаю, это то, что он рушится. Я пытаюсь получить свалку с помощью procdump, но я действительно борюсь. Я настройка ProcDump следующим образом:Procdump -e создание дампов для нефатальных исключений
ProcDump processname.exe -ma -e
Проблема заключается в том, в течение нескольких минут делать это, ProcDump будет генерировать дамп и выход ... хотя этот процесс никогда не разбивался. Если я добавлю -g, я все равно получаю тот же результат ... через несколько минут procdump будет генерировать дамп и выйти. Если я начну его снова, произойдет то же самое. Я открыл некоторые из дампов, которые он сгенерировал, и у них нет никакого собственного контекста исключения. Итак, я бросил все управляемые callstacks для всех управляемых потоков, и (во всех свалках я проверил до сих пор), я нашел что-то похожее на этот стек вызовов:
System.Threading.WaitHandle.WaitAny
System.Runtime.IOThreadTimer+TimerManager.OnWaitCallback
System.Runtime.IOThreadScheduler+ScheduledOverlapped.IOCallback
System.Runtime.Fx+IOCompletionThunk.UnhandledExceptionFrame
System.Threading._IOCompletionCallback.PerformIOCompletionCallback
Я предполагаю это необработанное исключение что заставляет procdump генерировать файл дампа. Я немного искал и нашел объект UnhandledExceptionEventHandler. Поэтому я предполагаю, что в процессе должно быть что-то, чтобы зафиксировать необработанные исключения. Или это просто стандартный материал SEH?
В любом случае, я не забочусь об этих необработанных исключениях, я забочусь только о том, что вызывает крушение. Есть ли способ, с помощью которого procdump может создавать только дамп при фатальном исключении? Я не думаю, что это будет работать, так как это не поймает исключение и просто сбрасывается, когда процесс завершается нормально. Я единственный вариант, чтобы перейти к чему-то еще, как DebugDiag?
Заранее спасибо за любые советы
ProcDump не очень хорошо при обнаружении, что исключения * действительно * необработанным. CLR включает и переводит исключение SEH в управляемое исключение. Чтобы проглотить попытку/поймать дальше, это произойдет. Подумайте, вместо этого используйте DebugDiag, он знает лучше. –
Спасибо Хансу, я подозревал, что это может быть так, я просто никогда не сталкивался с этим в прошлом (у меня в прошлом были дампы управляемых процессов .net без этой проблемы). Я предполагаю, что использование локальных дампов WER также приведет к такой же проблеме? –
Это не должно быть, WER только когда-нибудь ударит, когда шоу действительно закончится. –