2016-08-23 20 views
3

Я всегда считал себя достаточно опытным с захватом свалки, но этот меня действительно смутил. У меня есть процесс .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?

Заранее спасибо за любые советы

+1

ProcDump не очень хорошо при обнаружении, что исключения * действительно * необработанным. CLR включает и переводит исключение SEH в управляемое исключение. Чтобы проглотить попытку/поймать дальше, это произойдет. Подумайте, вместо этого используйте DebugDiag, он знает лучше. –

+0

Спасибо Хансу, я подозревал, что это может быть так, я просто никогда не сталкивался с этим в прошлом (у меня в прошлом были дампы управляемых процессов .net без этой проблемы). Я предполагаю, что использование локальных дампов WER также приведет к такой же проблеме? –

+0

Это не должно быть, WER только когда-нибудь ударит, когда шоу действительно закончится. –

ответ

0

Вы на самом деле сказать ProcDump сваливать на необработанных исключений самостоятельно.

-e Напишите дамп, когда процесс встречает необработанное исключение. Включите 1, чтобы создать дамп при исключении первой случайности.

Проведено from here.

Просто оставьте его, и вы не получите отвалов на необработанных исключений:

procdump processname.exe -ma 
+0

Я хочу сбросить необработанное исключение ... проблема в том, что необработанные исключения, которые он демпинг каким-то образом, не являются фатальными (т. Е. Не приводят к сбою), и это не те, которые мне интересны. –

 Смежные вопросы

  • Нет связанных вопросов^_^