설치 windbg를 (윈도우 디버거) 대상 컴퓨터에서 잘 작동하고있다. 디버거를 호출하고 의심스러운 프로세스에 연결하고 프로그램을 실행 한 다음 문제가 발생할 때까지 기다립니다. 문제가 발생하면, 이것은 당신의 스레드 중 어느 것이 대부분의 시간을 소모하는 표시됩니다
폭주 디버거 명령 행
에서 다음 명령을! 호출합니다. 그런 다음 대부분의 CPU 리소스를 소비하는 스레드에서 여러 스레드 스택을 가져옵니다.
0:015> !runaway
사용자 모드 시간 스레드 시간 0 : 1,074 0 0 일 : 00 : 21.637 11 : 137C 0 0 일 : 00 : 02.792 4 : 12c8 0일 여기
은 일례이며 0 : 00 : 00.530 9 : 1,374 0 0 일 : 00 : 00.046 15 : 13d0 0 0 일 : 00 : 00.000 14 1,204 0 0 일 : 00 : 00.000 13 : 154C 0 0 일 : 00 : 00.000 12 : 144c 0 일 0 : 00 : 00.000 10 : 1378 0 일 0 : 00 : 00.000 8 : 1340 0 일 0 : 00 : 00.000 7 12f0 0 0 일 : 00 : 00.000 6 12d4 0 0 일 : 00 : 00.000 5 : 12d0 0 0 일 : 00 : 00.000 3 : 12c4 0 0 일 : 00 : 00.000 2 : 12c0 0 일 0 : 00 : 00.000 1 : 12b4 0 일 00 : 00.000
이제 우리는 목록 11의 두 번째 스레드에 대한 호출 스택을 원한다고 가정하므로 먼저 스레드 11 ~ 11 초를 입력하면됩니다.
0:015> ~11s
EAX = 03fbb270 EBX = FFFFFFFF ECX = 00000002 EDX = 00,000,060 ESI = 00000000 EDI = 00000000 EIP = 77475e74 ESP = 0572f60c EBP = 0572f67c IOPL = 0 NV 최대 EI PL ZR NA PE NC CS = 001B SS = 0023 DS = 0023 ES = 0023 FS = 003B GS = 0000 EFL = 00000246 의 ntdll KiFastSystemCallRet! 77475e74 C3의 RET
이제 KP 실행하여이 스레드에 대한 호출 스택을 얻을 :
0:011> kp
ChildEBP RetAddr
0572f608 77475620 ntdll!KiFastSystemCallRet
0572f60c 75b09884 ntdll!NtWaitForSingleObject+0xc
0572f67c 75b097f2 kernel32!WaitForSingleObjectEx+0xbe
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files\Mozilla Firefox 3.1 Beta 1\nspr4.dll -
0572f690 10019a0b kernel32!WaitForSingleObject+0x12
WARNING: Stack unwind information not available. Following frames may be wrong.
0572f6ac 10015979 nspr4!PR_MD_WAIT_CV+0x8b
0572f6c4 10015763 nspr4!PR_GetPrimordialCPU+0x79
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files\Mozilla Firefox 3.1 Beta 1\xul.dll -
0572f6e0 64d44d6a nspr4!PR_Wait+0x33
0572f708 64dbe67e xul!NS_CycleCollectorForget2_P+0x698a
0572f72c 10019b3f xul!gfxWindowsPlatform::FontEnumProc+0xfd4e
0572f734 10015d32 nspr4!PR_MD_UNLOCK+0x1f
0572f738 1001624b nspr4!PR_Unlock+0x22
0572f754 1001838d nspr4!PRP_TryLock+0x4cb
00000000 00000000 nspr4!PR_Now+0x109d
을 공동 mmand kp가 매개 변수를 인쇄합니다. 로컬 변수는 dv로 인쇄 할 수 있습니다.
또는 sysinternals의 프로세스 탐색기를 사용할 수 있습니다.
원격 클라이언트 시스템이므로이 모든 작업을 수행 할 수없는 경우 추가 분석을 위해 사용자에게 보낼 수있는 덤프 파일을 만드는 userdump를 설치하십시오. 고객이 올바른 매개 변수로 userdump를 호출 할 수 있도록 배치 파일을 만들 수 있습니다. Userdump는 자신의 웹 페이지에서 다운로드 할 수있는 Microsoft의 도구입니다.
Jet/ACE 백 엔드를 사용하여 제품을 판매하고 있으며 데이터 저장소의 일상적인 유지 관리의 중요성에 대해 알지 못했습니까? 귀하의 고객은 무능함을 이유로 귀하를 고소해야합니다. –
Microsoft의 사람들이 "이봐, 데이터베이스가 손상 될 것 같아서 Access에서 메뉴 명령을 사용하여 고쳐야 해!"라고 생각하지 않았습니다. 그들은 SQL Server를 사용하는 사람들에게 똑같은 말을 할 것입니까?! – TheAgent
그것은 제트기 다. 그들은 그것을 말할 필요가 없다. ;) SQL Server의 주요 판매원 중 하나는 "Jet가 아닙니다."입니다. –