고객으로부터 높은 CPU 문제를 디버그하려고합니다. 나는 procdump를 사용하도록 노력했지만, 끝내지 않고 덤프를 작성하는 동안 중단됩니다. 대신 고객은 CPU 수준이 급상승 할 때 키보드를 사용하여 완전한 메모리 덤프를 시작했습니다.전체 메모리 덤프에 스택 정보가 누락되었습니다.
나는 모든 프로세스의 스레드에 대한 스택 추적을 볼 수 있기를 원하지만 어떤 스레드에 대해서도 상위 4-6 개의 스택 프레임을 볼 수 없다. 이러한 프레임은 버그 체크에 의해 시작된 트랩 루틴만을 포함하므로 실망합니다. WinDbg을 처음 사용하기 때문에이 정보를 수집하는 방법을 잘 모릅니다. 나는 다음을 수행하여 스택 정보를 받고 있어요 :
2: kd> !process 0 0 process.exe
PROCESS 8997f590 SessionId: 0 Cid: 094c Peb: 7ffd6000 ParentCid: 01c4
DirBase: 503f1000 ObjectTable: e53f1880 HandleCount: 1924.
Image: process.exe
2: kd> !process 8997f590
PROCESS 8997f590 SessionId: 0 Cid: 094c Peb: 7ffd6000 ParentCid: 01c4
DirBase: 503f1000 ObjectTable: e53f1880 HandleCount: 1924.
[...]
THREAD 89daf4f0 Cid 094c.0950 Teb: 7ffdf000 Win32Thread: e53f1ae0 WAIT: (Unknown) UserMode Non-Alertable
8997f8ac NotificationEvent
[...]
ChildEBP RetAddr
b8cf9c04 8083d26e nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4])
b8cf9c30 8083dc5e nt!KiSwapThread+0x2e5 (FPO: [Non-Fpo])
b8cf9c78 809208d7 nt!KeWaitForSingleObject+0x346 (FPO: [Non-Fpo])
b8cf9ca0 8093aef7 nt!IopSynchronousServiceTail+0x180 (FPO: [Non-Fpo])
b8cf9d38 8083387f nt!NtReadFile+0x5d5 (FPO: [Non-Fpo])
b8cf9d38 7c82847c nt!KiFastCallEntry+0xfc (FPO: [0,0] TrapFrame @ b8cf9d64)
WARNING: Frame IP not in any known module. Following frames may be wrong.
0012fc58 00000000 0x7c82847c
[...]
내가 예를 들어, 어떤 스레드의 컨텍스트로 전환하고 실행하는 경우, kb 50
을 내가 여전히 상위 몇 프레임을 얻을 수 있습니다. 어쨌든 호출 스택의 나머지 부분을 가져올 수 있습니까? 이 정보가 디스크로 페이징 된 경우이 정보를 사용할 수 없습니까?
또한 높은 CPU 사용량을 디버깅하는 방법에 대한 유용한 정보가 도움이 될 것입니다.
감사합니다. – ReferentiallySeethru