2009-05-23 7 views
4

저는 고객의 장소에서만 재생산되는 프로그램에 심각한 문제가 있습니다. 로그를 저장하는 것은 제 3 자 dll에서 오류가 발생하고 있는지 의심 스럽기 때문에 도움이되지 않습니다. 몇 가지 이유로 도서관 제공자에게 도움을 얻을 수 없었습니다. 나는 실패 시점에서 덤프를 생성 할 생각이므로 오프라인으로 분석해야한다. 권장되는 방법입니까? 아니면 어떤 대안?고객 환경에서 메모리 덤프를 만들고 있습니까?

답변

5

네, 이것은 모든 프로그램이 가지고 있어야하며 가능한 한 자주 활용해야합니다.

타사 라이브러리를 사용하지 않는 것이 좋습니다. 대신 자신의 덤프를 만드십시오. 그것은 매우 간단하고 간단합니다.기본적으로 다음을 수행해야합니다.

프로그램에 액세스해야합니다. dbghelp.dll. 이것은 사람이 읽을 수있는 호출 스택 등을 만들 수있게 해주는 윈도우 DLL입니다. 디버거는이 dll을 사용하여 프로세스의 데이터를 표시합니다. 사후 사후 디버깅, 즉 일종의 덤프도 처리합니다. 이 dll은 소프트웨어와 함께 안전하게 배포 될 수 있습니다. Debugging Tools for Windows을 다운로드하여 설치하는 것이 좋습니다. 이렇게하면 모든 종류의 도구와 최상의 도구 WinDbg.exe에 액세스 할 수있게되며 최신 dbghelp.dll도 해당 배포본에 포함됩니다.

dbghelp.dll에서 예를 들어 전화합니다. MiniDumpWriteDump(), 덤프 파일을 만드는 데 다소 차이가 있습니다. 너 끝났어. 파일을 손에 넣 자마자 사용을 시작할 수 있습니다. Visual Studio 디버거에서 .dmp 파일 확장명이나 WinDbg와 연결되어있을 수도 있습니다.

자, 여기있는 동안 생각할 몇 가지 사항이 있습니다. 이런 덤프 파일을 검사 할 때 실행 파일을 컴파일하고 링크 할 때 .pdb 파일을 생성해야합니다. 그렇지 않으면 덤프 데이터를 사람이 읽을 수있는 데이터에 매핑 할 기회가 없습니다. 좋은 콜 스택 (callstack)과 변수 값 등을 얻을 수 있습니다. 이것은 또한 .pdb 파일을 저장해야한다는 것을 의미합니다. 바로 그 릴리스와 정확히 일치시킬 수 있어야합니다. 덤프 파일에는 실행 파일의 날짜 스탬프가 찍혀 있기 때문에 디버거에는 정확한 pdb 파일이 필요합니다. .pdb 파일이 다른 컴파일 세션에 속하면 코드가 단일 비트로 변경되지 않아도 상관 없습니다. 토스트입니다.

모든 Windows win32 개발자가 Oleg Starodumov의 사이트 DebugInfo.com을 확인하도록 장려합니다. 여기에는 많은 샘플 및 자습서와 덤프 파일 생성을 구성하고 조정하는 방법이 포함되어 있습니다. 물론 특정 데이터를 제외하고 덤프 등에 첨부 할 사용자 정의 디버그 메시지를 만드는 방법은 무수히 있습니다.

예외가 발생하면 미니 덤프에 응용 프로그램 상태에 대한 매우 제한된 정보가 포함됩니다. 교환은 작은 파일입니다 (설정에 따라 약 50-100kB). 그러나 원하는 경우 전체 덤프를 만들 수 있습니다.이 덤프에는 전체 응용 프로그램의 상태, 즉 전역 및 커널 개체까지 포함됩니다. 이 파일은 거대 할 수 있으며 극단적 인 경우에만 사용해야합니다.

법적 측면이 있다면 고객이 자신이하는 일을 알고 있는지 확인하십시오. 사업상의 비밀이나 기타 법적 측면을 밝혀 내면 안되는 곳에서 이미 계약을 맺은 것 같습니다. 고객이 불만을 제기하면 버그를 발견하는 것이 얼마나 중요한지 설득하고 소프트웨어의 품질을 크게 향상시킬 것입니다. 다소 비용이 들지 않는 정도의 품질. 이 도움이 dumpanalysis.org

희망 : 그것은 그들에게 아무것도 비용이되지 않을 경우, 그것은 당신이 크래시 덤프 분석에 더 읽어하려는 경우 마지막으로, 여기에 또 다른 좋은 사이트입니다 또한 좋은 인수 :

입니다. 내가 더 설명하기를 원한다면 의견을 남겨주세요.

건배!

편집 :

그냥 MiniDumpWriteDump() 당신이 구조체 (밑줄) 미니 덤프 - 예외 정보에 대한 포인터가 있어야한다는 추가하고 싶었다.(또는 미니 덤프를 생성하는주의하면서 하나가 될 것입니다)

__try { 

} 
__except (YourHandlerFunction(GetExceptionInformation())) { 

} 

YourHandlerFunction (:하지만 GetExceptionInformation() 매크로는 예외 핸들러 (구조적 예외 처리 또는 SEH)에서 예외의 시간에 당신을 위해 이것을 제공 호출 체인 아래의 다른 기능). 또한 프로그램에 맞춤 오류가있는 경우 (예 : 뭔가 일이 일어날 일이 아니지만 기술적으로 예외는 아니지만, 당신은 RaiseException() 자신을 만들 수 있습니다.

GetExceptionInformation()은이 컨텍스트에서만 사용할 수 있으며 프로그램 실행 중에는 다른 곳에서는 사용할 수 없습니다.

3

크래시 덤프는 매우 일반적인 문제 해결 방법이며 특히 고객의 사이트에서만 재생되는 문제의 경우 매우 효과적 일 수 있습니다.

고객/고객이 수행중인 작업을 이해하고 권한이 있는지 확인하십시오. 크래시 덤프 (crash dump)는 고객이 문을 나설 때 또는 전선을 통해 걸어 나갈 수 없도록 (또는 허용되도록) 민감한 정보를 가질 수 있습니다.

0

면책 조항 : 나는 변호사가 아니다, 아니다 내가 한 척 할, 이것은 법적 조언이 아닙니다.

로그 및 크래시 덤프에 포함 할 수있는 데이터는 작업중인 도메인에 따라 달라집니다. 예를 들어, 의료 장비 및 환자 정보 시스템에는 권한이없는 사람에게 보이지 않아야하는 환자에 대한 중요한 데이터가 포함되는 경우가 있습니다.

The HIPAA Privacy Rule는 사용하고 사용에 대한 규제와 보호 건강 정보 (PHI)의 공개 설정 (...) "커버 실체"가 보유한 특정 정보의 공개를 조절한다. PHI는 건강 상태에 관한 건강 관리 조항 또는 개인에 연결할 수있는 건강 관리 지불액 을 포함하는 해당 대상 엔티티 이 보유하고있는 모든 정보입니다. [10] 이는 으로 광범위하게 해석되며 개인의 의료 기록 또는 지급 내역 중 일부를 포함합니다. - 위키 백과

건강 정보를 개인에게 연결해서는 안됩니다. 크래시 덤프 및 로그는 익명으로 처리되어 중요한 정보가 제거되거나 전혀 전송되지 않아야합니다.

어쩌면이 내용이 귀하의 구체적인 경우에는 해당되지 않을 수 있으므로 일반적인 참고 사항입니다. 나는 군사 및 금융 등과 같이 민감한 정보를 다루는 다른 영역에도 적용되는 것으로 생각한다.

0

기본적으로 덤프 파일을 생성하는 가장 쉬운 방법은 adplus를 사용하는 것입니다. 코드를 변경할 필요가 없습니다.

Adplus는 위의 문서에서 언급 한 것처럼 Windows 용 디버깅 도구의 일부입니다. Adplus는 기본적으로 windbg의 대용량 vbscript 자동화입니다.

ADPlus에서 사용하도록해야 할 것 :

  1. 다운로드와 C Windows 용 디버깅 도구를 설치 : \ 디버거를
  2. 응용 프로그램
  3. 명령 줄을 열고 C로 이동을 시작합니다 : \ 디버거
  4. 이 라인 "ADPlus를 -crash your_exe.exe"
  5. 충돌
에게 재생을 실행

필요한 모든 정보가 담긴 미니 덤프를 받게됩니다. 좋아하는 디버거에서 크래시 덤프를 열 수 있습니다. windbg에서 "analyze -v"명령은 고객 사이트에서만 발생하고 집에서 재현 할 수없는 모든 충돌의 40 % 이상을 도왔습니다.

관련 문제