2010-06-23 2 views
0

프로덕션에서만 발생하는 C++ exe 런타임 오류 문제를 해결하려고합니다. 나는 C++과 windbg에 익숙하지 않지만 여기서 해석을 풀고있다. 이 오류가 발생하는 방법과 조건에 대해 어떤 사람이 나를 어떻게 지적 할 수 있는지, 그리고 더 중요한 것은 어떤 코드 행이 그것을 일으키는 지 파악할 수 있다면 크게 감사하겠습니다. 나는 포럼을 많이 읽었지 만 VS 2008에서 dmp 파일을 열면 로컬로 pdb 파일이 있고 exe는 로컬이지만, 소스 코드로 이동 메뉴 옵션을 사용할 수 없다. 이 .dmp 파일을 분석하는 방법과이를 이해하는 방법에 대한 빠른 답장은 매우 높이 평가 될 것입니다. 감사합니다!.dmp 파일 분석


  • *
  • 예외 분석 *
  • * GetPageUrlData는, 서버 (404) URL 요청 HTTP 상태 반환에 실패

: http://watson.microsoft.com/StageOne/MYServer_exe/0_0_0_0/MyServer_exe/0_0_0_0/000194ab.htm?Retriage=1

FA를 ULTING_IP : MYSERVER + 194ab 004194ab c6040100의 MOV 바이트 PTR [ECX + EAX, 0

EXCEPTION_RECORD : FFFFFFFF - (.exr 내지 0xFFFFFFFFFFFFFFFF) ExceptionAddress : 004194ab (MYSERVER + 0x000194ab) 으로 Exception : C0000005 (액세스 위반) ExceptionFlags : 00000000 NumberParameters : [1] 00000001 파라미터 : [0] 2 파라미터 쓰기 00000000 시도 해결할 00000000

DEFAULT_BUCKET_ID : NULL_POINTER_WRITE

PROCESS_NAME : Myserver.exe

ERROR_CODE : (NTSTATUS) 0xc0000005 - 0x % 08lx의 명령이 0x % 08lx의 메모리를 참조했습니다. 메모리가 % s 일 수 없습니다.

EXCEPTION_CODE : (NTSTATUS) 0xc0000005 - 0x % 08lx의 명령이 0x % 08lx의 메모리를 참조했습니다. 메모리가 % s 일 수 없습니다.

EXCEPTION_PARAMETER1 : 00000001

EXCEPTION_PARAMETER2 : 00000000

WRITE_ADDRESS : 00000000

FOLLOWUP_IP : MYSERVER + 194ab 004194ab c6040100의 MOV 바이트 PTR [ECX + EAX, 0

MOD_LIST :

NTGLOBALFLAG : 0

APPLICATION_VERIFIER_FLAGS : 0

FAULTING_THREAD : 000004e0

PRIMARY_PROBLEM_CLASS : NULL_POINTER_WRITE

BUGCHECK_STR : APPLICATION_FAULT_NULL_POINTER_WRITE

LAST_CONTROL_TRANSFER : 경고 : 스택 긴장 정보 00418a4e에서이

STACK_TEXT을 004194ab하기 이용하지 마라. 르. 다음 프레임이 잘못되었을 수 있습니다. 087ffa74 00418a4e 0a73b070 087ffc6c 087ffd8c MYSERVER + 0x194ab 087ffb64 00,410,767 0a73b070 087ffd74 087ffd8c MYSERVER + 0x18a4e 087ffc6c 0041089b 0a73b0f8 0a727a78 0a73b108 MYSERVER + 0x10767 087ffd74 00,433,913 0a73b0f8 0a727a78 0a73b108 MYSERVER + 0x1089b 087ffe58 0042fbf3 0a73b0f8 0a727a78 00,000,044 MYSERVER + 0x33913 087fffb8 7d4dfe37 000006a0 00000000 00000000 MYSERVER + 0x2fbf3 087fffec 00000000 0042fae0 000006a0 00000000 KERNEL32 BaseThreadStart + 0x34

SYMBOL_STACK_INDEX :! 0

SYMBOL_NAME : MYSERVER + 194ab

012 3,516,

FOLLOWUP_NAME : MachineOwner

MODULE_NAME : MYSERVER

IMAGE_NAME : Myserver.exe

DEBUG_FLR_IMAGE_TIMESTAMP : STACK_COMMAND

4c2123df : ~ 86s; .ecxr; KB

FAILURE_BUCKET_ID! NULL_POINTER_WRITE_c0000005_Myserver.exe 알 수없는

BUCKET_ID : APPLICATION_FAULT_NULL_POINTER_WRITE_Myserver +

194ab 추가 답변 : MachineOwner

답변

1

k 당신에게 스레드에서 중지 한 현재의 스택 트레이스를 제공 할 것입니다.
~*kb는 모든 스레드의 당신에게 당신은 MS의 기호를 포함하는 기호 검색 경로를 설정하는 것 같아서

기호

를 스택 추적을 줄 것이다, 이것은 더 나은 스택 추적을하실 수 있습니다.

당신은 .sympath srv*C:\Symbols*http://msdl.microsoft.com/download/symbols을 사용하여이마다 할 이상의 영구적으로 srv*C:\Symbols*http://msdl.microsoft.com/download/symbols 당신은 다음을 사용하여 부하를 다시 기호를 얻을 필요가 있습니다

_NT_SYMBOL_PATH 환경 VAR을 (예를 들어 시스템 변수 등)을 설정할 수 있습니다.

.symfix+ c:\symbols 
.reload /f 

충돌 라인

EXCEPTION_RECORD : FFFFFFFF - (.exr 내지 0xFFFFFFFFFFFFFFFF) ExceptionAddress : 004194ab FAULTING_IP : MYSERVER + 194ab 004194ab c6040100의 MOV 바이트 PTR [ECX + EAX, 0

크래시가 모두 필요한 경우 응용 프로그램 'crashFinder'가 있습니다. 그러면 응용 프로그램과 pdb가로드되고이 004194ab을 입력하여 충돌 행을보고 할 수 있습니다.

0

응용 프로그램 PDB가있는 심볼 경로와 소스가있는 소스 경로를 톱 메뉴를 사용하여 설정할 수도 있습니다 (심볼 경로 설정 및 소스 경로 설정이라고합니다). 크래시 덤프의 경우

는 기호 및 소스 경로를 설정하고 덤프 파일을로드 한 후, 당신은 유용한 명령을 찾을 수 있습니다 : !analyze -v

을 그리고 붙여 넣은 보고서에서, 회선을 점검 : STACK_COMMAND: ~86s; .ecxr ; kb를 이 줄은 오류를 일으킨 스레드를 알려줍니다 (86). 그 줄을 지나서 명령 창에 넣으면 그 스레드에 대한 스택을 얻을 수 있습니다 : ~86s; .ecxr ; kb

0

VS에 더 익숙하다면 아직 포기하지 마십시오. 너 해체와 스택을 참조하고 기호가 부족합니까? 모듈의 스택 프레임을 클릭하고 코드가 표시되지 않습니까? 모듈 내에있는 스택 프레임을 볼 수 있습니까? MS 공개 기호에 대한 액세스 권한을 설정 했습니까? (어쨌든 WinDbg로도 가능할 것입니다). WinDbg에서 스택 기호를보고합니까? (여기에 붙여 넣은 스 니펫에 나열되지 않음). 그렇지 않으면 기호 문제 일 가능성이 큽니다. WinDbg 및 VS 모두에서이를 진단하는 방법이 있습니다. 디버그 할 모듈에 대한 '심볼로드 정보'를 검사 했습니까? (VS에서 가장 쉬운 방법은 모듈 창에서 모듈을 마우스 오른쪽 버튼으로 클릭하는 것입니다).

이러한 질문에 대한 답변의 조합에 따라 조언이 제공됩니다. 세부 정보를 제공하면 조언을 집중할 수 있습니다.