2009-08-19 2 views
3

C++ 프로젝트에서 사후 디버깅을 수행해야합니다. 수행 할 수있는 알려진 방법은 cdb 디버거를 미니 덤프 생성기로 설정하고 나중에 덤프를 처리하는 것입니다. 거의 모든 웹을 읽었으며 충돌 한 프로세스의 이름을 가진 미니 덤프를 만드는 솔루션을 찾지 못했습니다.AeDebug가 프로세스의 이름으로 미니 덤프를 가져 오도록 설정하는 방법은 무엇입니까?

cdb가 생성하는 방식으로 AeDebug \ Debugger 레지스트리 변수를 설정하는 방법이 있습니까? 프로세스의 이름을 가진 덤프 파일? 배치 파일에서 cdb.exe에 대한 호출을 캡슐화하면 잘 시작되지만 심볼 검색에서 차단 된 상태로 유지됩니다. 배치를 중지하기 위해 Ctrl + C를 수행해야합니다. 그러면 올바른 프로세스 이름을 가진 미니 덤프가 생성됩니다 ...하지만 무인 생산 환경에서 그런 것을 설정할 수는 없습니다 ...

아무도 전에 그 일을 했습니까?

답변

2

기호는 검색을 시작할 때 차단되기 시작합니다.

무엇을 찾고 계십니까? "! sym noisy"를 사용하여 심볼 로딩에 대한 잡음이있는 출력을 켤 수 있습니다. 그것은 영원히 막아서는 안됩니다.하지만 결국 시간 초과됩니다. 심볼 경로를 수정하면 도움이 될 것입니다. 심볼 경로를 아무 것도 설정할 수 없으면 아무 곳에서나 심볼로드가 차단 될 수 없습니다.

프로세스 이름으로 덤프를 생성하는 방법에 대한, 나의 동료 (제레미)는 CDB/NTSD 명령 줄에서이 제안 :

-c ".foreach(obj { lm 1m a @$exentry; }) { .dump /m /u ${obj}.dmp;.dump /ma /u ${obj}.dmp; }; q" 

그리고 그는 또한 사용하십시오 "라는 @ $ exentry 및 단지 $ exentry가 아니라 다른 것은 심볼 해석을 시도하고 for 루프를 파탄시킬 것입니다. "

그러나 쉬운 방법은 Windows 오류보고를 사용할 수 있습니다은 (WER) LocalDumps 특징 :

대신 프로세스 이름으로 덤프 파일의 http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx

는 프로세스 이름의 디렉토리가있을 것입니다 그 안에 덤프 파일이 들어있어 사용자의 요구를 충족시킬 수 있습니다. 덤프의 최대 정보를 보려면 DumpType을 0으로 설정하고 CustomDumpFlags를 0x1B65로 설정하십시오.

이 기능은 로컬 덤프를 구성하기위한 것입니다. "이러한 덤프는 나머지 WER 인프라와 별도로 구성되고 제어됩니다 .WER이 비활성화되어 있거나 로컬 덤프 컬렉션을 사용할 수 있습니다. 사용자가 WER보고를 취소합니다. 로컬 덤프는 Microsoft로 보낸 덤프와 다를 수 있습니다. "

LocalDumps는 관리되는 프로세스를 지원하지 않습니다.

+0

"LocalDumps는 관리되는 프로세스를 지원하지 않습니다.": 이것은 오해입니다. 그것은 .NET을 지원하지만, .NET이 처리되지 않은 예외 핸들러를 등록하지 않은 경우에는 지원되지 않습니다. –

관련 문제