Artigos

Tire duas dúvidas com o especialista no assunto Dr. Daphnis Citti de Lauro

minidumpwritedump 예제

이 예제에서는 MiniDumpWriteDump의 기본 사용 및 호출하는 데 필요한 최소 정보를 보여 줍니다. 덤프 파일의 이름은 개발자에게 달려 있습니다. 그러나 파일 이름 충돌을 방지하려면 응용 프로그램의 이름 및 버전 번호, 프로세스 및 스레드 번호, 날짜 및 시간에서 파일 이름을 생성하는 것이 좋습니다. 이렇게 하면 응용 프로그램 및 버전별로 미니 덤프를 그룹화하는 데도 도움이 됩니다. 미니 덤프 파일 이름을 구별하는 데 사용되는 정보의 양을 결정하는 것은 개발자의 결정입니다. Svetlana — 이 문제는 두 덤프 파일을 모두 작성하려고 할 때만 발생합니다. 첫 번째 덤프 (캐치가 아닌 덤프)를 언급 할 때 두 번째 덤프는 항상 나를 위해 성공하는 것처럼 보입니다. 이것이 근본 원인이라고 주장하지는 않지만 동일한 함수에서 여러 덤프 파일을 작성하지 않기 때문에 실제로 문제가 발생하지 않을 수 있습니다. MiniDumpWriteDump덤프는 덤프되는 대상 프로세스 내에서가 아니라 가능한 경우 별도의 프로세스에서 호출해야 합니다.

대상 프로세스가 이미 안정적이지 않은 경우 특히 그렇습니다. 예를 들어, 방금 추락한 경우입니다. 로더 교착 상태는 대상 프로세스 내에서 MiniDumpWriteDump을 호출할 때 발생할 수 있는 많은 부작용 중 하나입니다. 실제 구현은 간단합니다. 다음은 MiniDumpWriteDump를 사용하는 방법의 간단한 예입니다. tl;dr: 여기 액세스할 수 있는 svn 리포지토리에 전체 코드 예제를 게시했습니다. DbgHelp.dll을 Windows용 디버깅 도구의 설치 디렉토리에서 예제 실행 도구가 있는 디렉터리로 복사합니다. 이전 예제의 경로 이름은 GetTempPath 함수를 호출하여 임시 파일로 지정된 디렉터리 경로를 검색하여 생성된 다는 점에 유의해야 합니다. 이 디렉터리 사용은 권한이 가장 적은 사용자 계정에서도 작동하며 더 이상 필요하지 않은 경우 미니덤프가 하드 드라이브 공간을 차지하지 못하게 합니다.

3. 프로젝트를 만들고 프로젝트에 예제 파일을 추가합니다. 예제를 빌드하는 데 필요한 다음 단계: 어느 쪽이든 VS 2010은 덤프 파일을 열 수 있습니다. 따라서 테스트 하는 방법 간에 다른 점이 있어야 합니다. 당신은 나에게 당신의 끝에 문제를 보여 주는 몇 가지 예제 코드를 줄 수 있고 나는 내 시도 할 것이다? 다음은 효과적인 미니덤프 문서에 대한 함께 제공되는 예제입니다. 페이지 힙을 사용하도록 설정하는 데 사용하는 명령 : gflags / p / enable c :svnbinmyApp.exe / 전체 덤퍼는 스택을 걸을 수 있도록 크래셔의 스레드를 일시 중단해야합니다. 크래셔는 결국 덤퍼의 프로세스 핸들을 기다리면 자체적으로 일시 중단되지만 덤퍼가 걷기 시작하기 전에 이 지점에 도달하지 못했을 가능성이 있으므로 명시적 SuspendThread가 안전해야 합니다. 그러나 이 단점은 덤퍼가 스레드를 다시 시작하거나 종료하기 전에 프로세스를 종료해야 하거나 사용자가 스레드를 종료할 때까지 크래셔가 일시 중단된 상태로 유지된다는 단점이 있습니다. 따라서 덤퍼는 충돌에 대해 복원력이 있어야 합니다. 토론이 필요한 호출의 마지막 부분은 콜백 필터입니다.

이 함수는 미니덤프 작성기에서 호출하여 덤프 파일의 내용을 필터링할 수 있도록 합니다. 콜백은 필터링할 정보의 유형을 나타내는 입력 매개 변수를 전달하며, 출력 매개 변수를 수정하여 덤프 파일에서 특정 정보를 제외할 수 있습니다. 이것은 두 가지 이유로 우리에게 중요한 메커니즘입니다 : 1) 호출자가 덤프 파일의 크기를 제어 할 수 있도록하고 2) 사용자가 표시되지 않도록 도우미 스레드를 필터링 할 수 있어야합니다. 첫 번째 점은 호출자에게 특정 버그를 해결하기 위해 10k의 정보만 필요할 수 있지만 다른 버그를 해결하기 위해 100MB의 정보가 필요할 수 있기 때문에 중요합니다. 두 번째 요점은 단순히 중요 하므로 호출자에게 API의 구현 세부 정보를 노출 하지 않습니다.