Установите windbg (отладчик Windows) на целевой машине. Вызовите отладчик и подключитесь к подозрительному процессу, запустите программу и дождитесь возникновения проблемы. Когда возникает проблема, вызовите следующую команду в командной строке отладчика
! Беглый
Это покажет, какие из ваших потоков занимают большую часть времени. Затем получите несколько потоков из этого потока, который потребляет большую часть ресурсов вашего процессора.
Вот пример:
0:015> !runaway
Время режима пользователя
Время нити
0: 1074 0 дней 0: 00: 21.637
11: 137с 0 дней 0: 00: 02.792
4: 12с8 0 дней 0: 00: 00.530
9: 1374 0 дней 0: 00: 00.046
15: 13d0 0 дней 0: 00: 00.000
14: 1204 0 дней 0: 00: 00.000
13: 154с 0 дней 0: 00: 00.000
12: 144с 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 дней 0: 00: 00.000
Теперь предположим, что нам нужен стек вызовов для второго потока в списке, потока 11, поэтому сначала переключимся на поток 11. Это можно сделать, введя ~ 11s.
0:015> ~11s
eax = 03fbb270 ebx = ffffffff ecx = 00000002 edx = 00000060 esi = 00000000 edi = 00000000
eip = 77475e74 esp = 0572f60c ebp = 0572f67c iopl = 0 nv up 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
Команда kp напечатает параметры. Локальные переменные могут быть напечатаны с помощью DV.
В качестве альтернативы вы можете использовать Process Explorer из sysinternals.
Если все это невозможно, поскольку это удаленный клиентский компьютер, установите userdump, который создает файл дампа, который можно отправить вам для дальнейшего анализа. Вы можете создать пакетный файл, чтобы клиент вызывал userdump с правильными параметрами. Userdump - это инструмент от Microsoft, который можно загрузить с их веб-страницы.