2011-02-16 10 views
3

일부 사용자가 특정 상황에서 안정적으로 충돌하는 것으로보고하는 소프트웨어 응용 프로그램이 있습니다. 나는 내가 가진 기계 중 어떤 것에 그것을 재현 할 수 없기 때문에 그것을 해결하는 방법에 관해서는 꽤 고생했다. 난 비주얼 스튜디오 2010을 사용하고 내가 사용자를 준 빌드 내 .pdbs이있어어셈블리에서 사용자 크래시 디버그

00505e58 1000 adc [eax],al 
00505e5a cc int 3 
00505e5b cc int 3 
00505e5c cc int 3 
00505e5d cc int 3 
00505e5e cc int 3 
00505e5f cc int 3 
00505e60 55 push ebp 
00505e61 8bec mov ebp,esp 
00505e63 83ec1c sub esp,0x1c 
FAULT -> 00505e66 ff4f08 dec dword ptr [edi+0x8] ds:0023:00000008=???????? 
00505e69 53 push ebx 
00505e6a 56 push esi 
00505e6b 0f85b0000000 jne Construct2+0x105f21 (00505f21) 
00505e71 8d9894010000 lea ebx,[eax+0x194] 
00505e77 8d45f0 lea eax,[ebp-0x10] 
00505e7a 8bcb mov ecx,ebx 
00505e7c e8ef4ff1ff call Construct2+0x1ae70 (0041ae70) 
00505e81 8d45e4 lea eax,[ebp-0x1c] 
00505e84 8bcb mov ecx,ebx 
00505e86 e88580fdff call Construct2+0xddf10 (004ddf10) 

:

사용자

는 나에게 충돌이 같은 일이 조립 라인을 기록했다. 이 어셈블리 추적을 오류 코드 줄로 전환 할 수 있습니까?

답변

2

충돌이 발생했을 때 전체 크래시 덤프를 얻을 수 있다면 windbg 또는 Visual Studio에서 dmp를 가져 와서 소스 코드로 쉽게 디버깅 할 수 있습니다. 덤프 및 디버깅을 얻으려면 웹에 많은 정보가 있습니다. 예를 들어 덤프와 일치하는 pdb가 있고 windbg에서 thsi를 가져 오는 경우 ".lines"를 수행하고 이것이 어디에서 발생하는지 정확하게 볼 수 있습니다.

덤프가없는 경우 앱을 로컬로 실행하고이 주소의 코드를 확인하십시오. 내가 Construct2.exe라고 가정하는 앱이 기본 주소 0x0040000에서 시작하여 EDI가 0x00505E66 인 곳에서 충돌하는 것 같습니다. 따라서 디 어셈블리 뷰로 전환하면이 주소로 이동합니다 (또는 bp를 설정하십시오.) 그런 다음 출처를 살펴 보시면됩니다.

+0

다른 방법으로 프로그램에서 이진 검색을 수행 할 수 있습니다. "e8 ef 4f f1 ff"(또는 예제의 모든 코드) – Shelwien

+0

감사합니다. windbg이 유용했습니다. – AshleysBrain