2016-06-17 2 views
3

충돌이 발생할 때 미니 덤프 파일을 생성하도록 내 Windows 7을 구성했지만 응용 프로그램이 충돌했을 때 덤프 파일이 작성되지 않았습니다. 대답에 대한 검색은 오히려 confused을 덤프 파일이 언제 만들어 졌는지, Windows가 다운되거나 응용 프로그램이 충돌 할 때를 남겨 둡니까?정확히 언제 메모리 덤프 파일이 생성됩니까?

제 경우에는 응용 프로그램이 충돌 할 때 제 파일을 찾고 있습니다. 나는 상태 전형적인 충돌 대화 상자가 나타납니다

TheApp 응용 프로그램

Windows가

문제에 대한 솔루션을 온라인으로 확인할 수 있습니다

을 작동이 중지되었습니다 -> 해결책을 온라인으로 확인하고 프로그램을 종료를

-> 프로그램을

닫습니다 - 프로그램

에게> 디버그

충돌이 발생하면 내 응용 프로그램에 대한 덤프 파일을 생성 할 수 있습니까? 개발 기계에서이 버그를 생성 할 수 없으므로 덤프 파일에서 다시 걷고 싶습니다. 버그 소스 (소스 코드)를 추적하는 다른 옵션이 있습니까?

+0

작업 관리자에서 실행중인 모든 프로세스에서 덤프를 만들 수 있습니다. – antlersoft

+0

@antlersoft는 내가 필요로하는 것이고, 충돌 할 때 생성 되는가? 그게 어떻게 이루어 졌는지 가르쳐 주실 수 있다면. – zar

+0

누군가 * MiniDumpWriteDump()를 호출 할 때. 당신이 그것을 원한다면 Google은 "덤프 만들기"를 원합니다. –

답변

4

우선, 완전히 다른 "충돌시 미니 덤프 만들기"설정을 구성 할 수있는 곳이 있습니다.

  1. Windows가 충돌 할 때 당신은 커널 덤프 파일을 만들도록 Windows를 구성 할 수 있습니다, 즉 죽음의 블루 스크린 (BSOD)가 발생했을 때.이것은 Windows 7에서 다음 화면에서 이루어집니다 :

    Kernel minidump for Windows crashes

  2. 당신은 사용자 모드 덤프 파일을 만들도록 Windows를 구성 할 수 있습니다 응용 프로그램 충돌, 즉 대신 대화를 "윈도우 오류보고"할 때 어떤 일반적으로 나타납니다. 그렇게하려면 사전에 알면 LocalDumps (MSDN)이라는 레지스트리 키를 구성하십시오. 기본적으로 덤프는 %LOCALAPPDATA%\CrashDumps 아래에 생성되며 이름 지정 체계는 app.exe.<PID>.dmp입니다. 완성도를 위해서

  3. WER dialog

    는 다른 트리거가있을 수 있습니다. 유일한 확실한 방법은 : MiniDumpWriteDump (MSDN) 메서드가 호출 될 때입니다.

나는 위의 옵션 2를 원한다고 확신합니다. 문제가 있으면 conditions for LocalDump이 모두 충족되는지 확인하십시오.

I have posted in my blog : @antlersoft가 제공 한 대답이 작동하지 않습니다. 대화 상자가 표시 될 때 Windows에서 응용 프로그램을 중지하기 위해 중단 점을 트리거하고 Windows 오류보고의 호출 스택을 주입했습니다. 결국 디버깅을위한 좋은 출발점이 아닙니다.

어떤 일을 할 것은 :

  1. 당신의 선택의 디버거를
  2. 눌러 WER 대화 상자의 "디버그"버튼을
  3. 이 경고를 확인 디버거에서
  4. 를 눌러 "이동" 이미 연결된 디버거에 대해
  5. 선택한 디버거를 사용하여 디버깅을 시작하라는 메시지가 나타나면 "아니오"를 클릭하십시오.

작업 관리자를 사용하여 크래시 덤프를 만드는 것은 권장되지 않습니다. 응용 프로그램의 비트를 고려하지 않으므로 나중에 문제가 발생할 수 있기 때문입니다. ways to create good and useful crash dumps을 참조하십시오.

+0

매우 유용한 답변; LocalDump reg 키를 알지 못했습니다. – shrike

+0

고마워, 네, 확실히 # 2 싶습니다. 당신은 내가'사용자 모드'덤프를 선택했다면, 실제로 미니 덤프 파일이 자동으로 생성 될 것을 기대해야한다는 혼란을 해결할 수 있습니다. 그러나 덤프 파일의 이름은 무엇이며 생성 될 것인가? – zar

+0

그리고 @antlersoft 응답에 대한 후속 조치를했고 의도적으로 충돌하는 새로운 더미 애플리케이션을 테스트했으며 실제로 디버거를 연결하지 않고 작업 표시 줄에서 마우스 오른쪽 버튼을 클릭하여 덤프 파일을 생성 할 수있었습니다. 그래서이 접근법은 간단한 데모 응용 프로그램에서 작동하는 것처럼 보이지만 실제로 문제를 실행 가능한 문제로 조사하고 있습니다. – zar

1

Windows가 충돌 할 때 Minidump가 만들어집니다. 응용 프로그램 충돌을 의도하지 않았습니다.

응용 프로그램의 크래시를 디버깅하려면 시작한 후에 디버거에 연결할 수 있습니다. 응용 프로그램이 충돌 할 때 "디버그"버튼을 클릭하면 동일한 작업이 수행됩니다. 예를 들어 MS Visual Studio의 디버거를 사용하여이를 수행 할 수 있습니다.

MS 비주얼 스튜디오 디버거 프로세스를 부착에 도움이 페이지를 참조하십시오 : https://msdn.microsoft.com/en-us/library/3s68z0b3.aspx

편집 : (토마스 코멘트)

당신이 할 수있는 예상대로이 작동하지 않을 수 있으므로, 텍스트를 제거 다음 또한 작업 관리자에서 덤프 파일을 만들지 만, 디버거를 분석하려면 디버거가 필요하며 사실 응용 프로그램이 중단 될 때 덤프 파일을 가져올 수 있는지 확신 할 수 없습니다. 가능한 경우 가장 좋은 방법은 대상 시스템이 시작된 후 또는 충돌이 발생했을 때 디버거에 프로세스를 연결하여 대상 시스템에서 프로세스를 디버그하는 것입니다.

+0

문제는 대상 컴퓨터의 릴리스 빌드에서 발생합니다. 디버거를 설치할 수는 있지만 IDE에서 시작할 때 발생하지 않습니다. – zar

+0

파일이 명령 행에서 시작된 경우에도 디버거에 첨부 할 수 있습니다. 디버거를 시작하고 "프로세스 첨부"를 클릭 한 다음 실행중인 프로세스 목록에서 프로세스를 선택하십시오. '디버그'버튼을 클릭하여 문제가 발생한 경우 첨부 할 수도 있습니다. – shrike

+0

작업 관리자는 올바른 비트 덤프를 생성하지 않으므로 좋은 선택이 아닙니다. –

1

충돌 대화 상자가 표시되면 작업 관리자로 이동하여 프로세스를 찾은 다음 프로세스를 마우스 오른쪽 단추로 클릭하고 "덤프 파일 만들기"를 선택하십시오. 덤프 파일은 사용자의 AppData/Local/Temp 폴더에 생성됩니다. % AppData % \ Local \ Temp \ .DMP로 이름이 지정됩니다. 여러 개를 만들면 -1.DMP 등이됩니다. 개발 컴퓨터로 덤프 파일을 옮기고 Visual Studio 내에서 열 수 있습니다. 그런 다음 Visual Studio는 디버거에서 프로세스를 실행하는 동안 충돌 지점에서 "모두 중단"하는 것처럼 작동합니다.

+0

그 유망한하지만 당신은 그것이 작동 중지하고 본질적으로 응답하지 않는 메시지를 내보낼 때 여전히 덤프 파일을 생성한다는 점에 긍정적입니까? :) – zar

+1

@ zar - 프로세스가 여전히 메모리에 있으며 디버거가 연결될 준비가되어 있으므로 덤프를 만들 수 있습니다. – antlersoft

+0

이것을 해본 결과, 덤프를 분석해 보셨습니까? 브레이크 포인트에서 멈추고 원하는 예외가 없으므로 힘들 것입니다. –

관련 문제