2016-08-23 5 views
3

나는 항상 덤프 캡처와 관련하여 숙련 된 경험이 있다고 생각했지만,이 질문은 실제로 혼란 스럽습니다. 주기적으로 충돌하는 .NET 프로세스가 있습니다. 네이티브 또는 관리되는 코드에서 충돌이 발생하는지 여부 또는 예외 또는 타사 DLL을 때리는 프로세스 자체인지 여부에 관계없이 충돌이 무엇인지 알 수 없습니다. 내가 아는 전부는 그것이 부서지고있는 것이다. 나는 procdump를 사용하여 충돌의 덤프를 얻으려고 노력하고 있지만, 나는 정말로 고심하고있다. I 설정 procdump는 다음과 같이Procdump -e 치명적이지 않은 예외에서 덤프 생성

procdump processname.exe -ma -e

문제가

,이 일을 몇 분 이내에, procdump은 비록 ... 덤프하고 종료 생성을 프로세스가 실제로 충돌하지 않습니다. -g를 붙이면 같은 결과를 얻습니다 ... 몇 분 후에 procdump가 덤프를 생성하고 종료합니다. 다시 시작하면 똑같은 일이 일어날 것입니다. 생성 된 덤프 중 일부가 열렸으며 고유 예외 컨텍스트가 없습니다.

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에 지시 할 수있는 방법이 있습니까? 나는 이것이 예외를 잡아 내지 않을 것이고 프로세스가 정상적으로 종료 될 때 그냥 덤프 할 것이므로 -t가 작동한다고 생각하지 않는다. DebugDiag와 같은 다른 프로그램으로 이동하는 유일한 방법은 무엇입니까? 당신은 실제로 처리되지 않은 예외 자신에 덤프 ProcDump에게 어떤 조언

+1

Procdump 예외는 * 정말 * 처리되지 않은 것을 감지 매우 좋지 않다. CLR은 SEH 예외를 단계적으로 처리하고 관리 예외로 변환합니다. try/catch 옆에 삼키려면 다음과 같이하십시오. 대신 DebugDiag를 사용하는 것이 좋습니다. 더 잘 알고 있습니다. –

+0

감사합니다 한스, 나는 그것이 사실일지도 모른다는 의심을 했었습니다. 나는 과거에이 문제를 결코 경험하지 못했습니다 (나는이 문제가 발생하지 않고 과거에 관리 된 .net 프로세스를 덤프했습니다). WER 로컬 덤프를 사용하면 같은 문제가 발생할 수 있다고 생각합니까? –

+0

WER는 쇼가 끝났을 때만 시작됩니다. –

답변

0

에 미리

감사합니다.

-e 프로세스에서 처리되지 않은 예외가 발생하면 덤프를 작성하십시오. 첫 번째 예외시 덤프를 만들려면 1을 포함시킵니다.

따옴표는 from here입니다.

는 그냥 생략하면 처리되지 않은 예외에 덤프을받지 않습니다 :

procdump processname.exe -ma 
+0

처리되지 않은 예외를 덤프하고 싶습니다. 문제는 처리되지 않은 예외가 어떻게 든 덤프되는 것은 치명적이지 않습니다 (즉, 충돌이 발생하지 않음). 그래서 관심이없는 예외입니다. –

관련 문제