Отладка тупика с Windbg!команда clrstack
когда я выдал команду clrstack,я получил следующий вывод. Это callstack блокирующего потока, который владеет взаимоблокировкой и приводит к взаимоблокировке. Это его точная цель? Имеет ли он какие-либо другие цели (без каких-либо параметров). Где я могу получить больше информации?
!clrstack
OS Thread Id: 0x1b2c (6956)
ESP EIP
0012f370 7c90e514 [HelperMethodFrame: 0012f370] System.Threading.Thread.SleepInternal(Int32)
0012f3c4 79299275 System.Threading.Thread.Sleep(Int32)
0012f3c8 00e0030f testlock.LockTest.Test()
0012f420 00e00146 testlock.Program.Main(System.String[])
0012f69c 79e71b4c [GCFrame: 0012f69c]
3 ответов
как: отлаживать тупики с помощью Windbg?
CLRStack [- a] [- l] [- p] [- n] обеспечивает трассировка стека только управляемого кода.
параметр-p показывает аргументы управляемая функция.
опция-l показывает информацию о локальные переменные в кадре. сигнал бедствия Не удается получить расширение отладки местный имена, поэтому вывод для local имена в формате = .
опция-a (all) является ярлыком для - l и-pcombined.
параметр-n отключает отображение имена исходных файлов и номера строк. Если отладчик имеет возможность Symopt_load_lines указано, SOS будет найдите символы для каждого управляемого рамка и в случае успеха будет отображаться соответствующее имя исходного файла и номер строки. The-n (без строки числа) параметр можно указать для отключения такое поведение.
расширение отладки SOS не отображение кадров перехода на x64 и Платформы на базе IA-64.
обновление: (благодаря @Liran): чтобы просмотреть стеки вызовов для всех потоков в приложении, выполните следующую команду:
~*e!clrstack
(что в основном означает: "повторите все потоки и выполните команду"!clrstack на каждый один из них.)"
использовать sosex Стив Джонсон. У этого есть команда, чтобы обнаружить тупики для вас.
загрузите расширение по ссылке и загрузите его, например
.load D:\sosex_32\sosex.dll
затем проблема
!dlk
пример вывода (взято с сайта Стива)
0:010> !обнаружен тупик dlk: поток CLR 4 содержит блок синхронизации 00000000024c6970 OBJ:000000007fff0f80[система.String] STRVAL=SYNC1 блок синхронизации ожидания 00000000024c6928 OBJ: 000000007fff0fa8[система.String] STRVAL=SYNC2 CLR поток 5 удерживает блок синхронизации 00000000024c6928 OBJ:000000007fff0fa8[система.Строка] STRVAL=SYNC2 ожидает блока синхронизации 00000000024c6970 OBJ: 000000007fff0f80[System.String] STRVAL=SYNC1 поток CLR 4 является ожидания на ConsoleTestApp.ConsoleTestApp.MonitorDeadlockThreadProc ()+0xa4 (IL) [C:\dev\ConsoleTestApp\ConsoleTestApp.cs, строка 195] поток CLR 5 ожидания на ConsoleTestApp.ConsoleTestApp.MonitorDeadlockThreadProc ()+0xa4 (IL) [C:\dev\ConsoleTestApp\ConsoleTestApp.cs, строка 195]
см. также ссылке для прохождения
Тесс в блоге много полезной информации о windbg. Вот один в должности что может помочь.