2008-11-05 2 views
4

내 응용 프로그램이 갑자기 충돌 할 때 전체 크래시 덤프를 얻을 수있는 방법이 있습니까?비 관리 코드 충돌로 덤프를 생성 하시겠습니까?

문제는 .Net 프레임 워크 자체를 죽이는 관리되지 않는 코드 때문인 것으로 의심됩니다. 그 이유는 크래시가 발생한 순간에 응용 프로그램에 디버거가 연결되어 있지 않으면 응용 프로그램이 사고를 처리 할 수있는 기회를 얻습니다.

충돌이 무작위로 발생하고 많은 설치 위치가 있기 때문에 디버거를 연결하지 않고 기다릴 수 없습니다. 따라서 디버거를 연결하지 않고도이 작업을 수행 할 수 있는지 궁금합니다.

편집 : Microsoft Debugging SDK에 대해 알고 있고 DebugDiag에 대해서도 알아 냈습니다. 저는 매번 응용 프로그램에 연결하지 않고도이 작업을하고 싶습니다. 일반적으로 판매 중이기 때문에 디버거를 연결하고 스택 추적을 탐색 할 시간이 없습니다. DebugDiag는이 문제에 대한 규칙을 설정하는 것처럼 보이지만 일부 프로세스가 시작될 때까지 기다리지 않고 이미 실행중인 프로세스에서만 작동하는 것처럼 보입니다.

답변

0

debugdiag는 완전히 scriptable입니다. 이와 같은 문제가 발생하면 특정 프로세스 이름을 검색하여 자동으로 첨부합니다.

0

가장 좋은 방법은 레지스트리를 편집하여 충돌이 발생하면 적절한 응용 프로그램을 호출하여 덤프를 생성하는 것입니다. 그래서 당신의 경우에 닥터 왓슨에게 크래시 덤프를 생성하게 할 것입니다.

link

는 기본적으로 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug

설정 값

Value Name = Auto 
Type = String (REG_SZ) 
Data Value = 1 or 0. (Default is 1) 
Value Name = Debugger 
Type = String (REG_SZ) 
Data Value = drwtsn32 -p %ld -e %ld -g 

이 그 앱 충돌 지점에서 닥터 왓슨를 호출합니다 키 레지스트리를 편집을 참조하십시오. 자세한 내용은이 게시물의 링크를 참조하십시오. 미래에 Dr. Watson을 호출하지 않으려면 자동 값을 0으로 설정해야합니다.

0

프로그램에 대한 일반 예외 처리기를 만듭니다. 예외 처리기 내부에서 원하는 경로에 수동으로 덤프를 작성하는 코드를 작성하십시오.

관련 문제