Отладка зависшего .net-приложения с помощью WinDbg и SOS, тупиковая или сбежавшая нить?

2

Я использую WinDbg и SOS для отладки зависшего приложения .NET (остается в TaskManager после закрытия приложения). Когда я выполняю команду! Threads, я получаю вывод ниже. Он показывает только один поток, имеющий Lock Count = 1.

0:002> !threads
ThreadCount:      132
UnstartedThread:  2
BackgroundThread: 54
PendingThread:    0
DeadThread:       48
Hosted Runtime:   no
                                                                                                        Lock  
       ID OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain           Count Apt Exception
   0    1 13010 000002716ae37680  2036220 Preemptive  00000271060C1958:00000271060C36E8 000002716ae2afd0 0     STA 
   2    2 106e4 000002716ae63220    2b220 Preemptive  0000027105FB9778:0000027105FBB6E8 000002716ae2afd0 0     MTA (Finalizer) 
XXXX    3    0 000002716d1b8360  8039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Completion Port) 
XXXX    4    0 000002716d1ca8b0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
   7    5 14570 000002716d23e290  3029220 Preemptive  0000027105FF1D08:0000027105FF36E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
  10    7 14c54 000002716d85ddc0  102a220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA (Threadpool Worker) 
  12    8 12758 000002716d8b56a0  202b220 Preemptive  00000271060457C8:00000271060476E8 000002716ae2afd0 1     MTA 
XXXX    9    0 000002716d8795d0  8039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Completion Port) 
  13   10 12ef8 000002716d8b95d0  1020220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  15   11 11e04 000002716d8d21c0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  16   12 14b30 000002716d8dbd50  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  17   14 14760 000002716d819c30  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   15    0 000002716d21c7a0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  18   16 143e8 0000027170b91780  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  19   17 13b9c 0000027170ba5800  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  20   18 11278 0000027170bb8600  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  21   19 14608 000002716d805310  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  22   20 131f8 000002716d8e0830  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  23   21 14a54 000002716d8e1000  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  24   22 13d78 000002716d8e1fa0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  25   23 10da8 000002716d8de8f0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  26   24 137c4 0000027170b99a90  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  27   25 12580 0000027170b9a260  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  28   26 14388 0000027170b9aa30  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  29   27 12390 0000027170b95440  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  30   28 f5b4 0000027170b9b200  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  31   29 fde8 0000027170b963e0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  32   30 13114 0000027170b97380  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  33   31 14068 0000027170b98320  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  34   32 14a38 0000027170ba7790  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  35   33 1391c 0000027170ba67f0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  36   34 13a64 0000027170ba6fc0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  37   35 f764 0000027170bac5b0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  38   36 f818 0000027170baae40  1029220 Preemptive  0000027106299D48:000002710629B6E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
  39   37 14738 0000027170bacd80  1029220 Preemptive  0000027106275548:00000271062756E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
XXXX   38    0 0000027170ba7f60  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  40   39 1232c 0000027170ba6020  3029220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA (Threadpool Worker) 
XXXX   40    0 0000027170db57e0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX   41    0 0000027170db5010  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX   42    0 0000027170db7720  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  42   43 14d6c 0000027170db4840  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  43   44 13d70 0000027170db1960  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   45    0 0000027170db2130    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX   46    0 0000027170db4070    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX   47    0 00000271731b4650    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  44   48 60ec 00000271731b0fa0    2b020 Preemptive  000002710617F738:00000271061816E8 000002716ae2afd0 0     MTA 
  45   49 132d8 00000271731b36b0  202b020 Preemptive  000002710617D738:000002710617F6E8 000002716ae2afd0 0     MTA 
  46   50 134cc 00000271731b1770  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  47   51 14028 00000271731b2ee0  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   52    0 00000271731b3e80    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX   53    0 00000271731b1f40    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  48   54 14bf0 00000271731b07d0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  49   55 1147c 00000271731c8800  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  50   56 1467c 00000271731c8030    2b020 Preemptive  0000027106185738:00000271061876E8 000002716ae2afd0 0     MTA 
  51   57 14148 00000271731cbeb0  202b020 Preemptive  0000027106183738:00000271061856E8 000002716ae2afd0 0     MTA 
  52   58 14574 00000271731cc680  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  53   59 12444 00000271731c5920  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   60    0 00000271731c7090    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX   61    0 00000271731c8fd0     9600 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX   62    0 00000271731c7860     9600 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  54   63 14904 00000271731c97a0  202b220 Preemptive  0000027106359808:000002710635B6E8 000002716ae2afd0 0     MTA 
  55   64 12920 00000271731f67c0    2b020 Preemptive  000002710634F700:00000271063516E8 000002716ae2afd0 0     MTA 
  56   65 14e54 00000271731f5050  202b020 Preemptive  0000027106189738:000002710618B6E8 000002716ae2afd0 0     MTA 
  57   66 14e34 00000271731fb5e0  202b020 Preemptive  0000027106354F28:00000271063556E8 000002716ae2afd0 0     MTA 
  58   67 11d88 00000271731fa640  202b020 Preemptive  00000271060797D8:000002710607B6E8 000002716ae2afd0 0     MTA 
XXXX   68    0 00000271731fae10    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  60   69 12d2c 00000271731fbdb0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   70    0 00000271731f9e70    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  59   71 12e5c 00000271731f8ed0    2b020 Preemptive  0000027106193738:00000271061956E8 000002716ae2afd0 0     MTA 
  61   72 14a94 000002717320c730  202b020 Preemptive  0000027106191738:00000271061936E8 000002716ae2afd0 0     MTA 
  62   73 fd58 0000027173213f70  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  63   74 13858 0000027173212030  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  64   75 ef34 00000271732185c0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   76    0 00000271732156e0    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  65   77 fd9c 0000027173216680  202b220 Preemptive  0000027106094C80:00000271060956E8 000002716ae2afd0 0     MTA 
  66   78 129a4 0000027173217620  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   79    0 0000027173211090    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  67   80 13120 0000027173209080  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  68   81 147ec 000002717320fde0  202b220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   82    0 000002717320a7f0    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  69   83 12720 000002717320bf60    2b020 Preemptive  000002710619D738:000002710619F6E8 000002716ae2afd0 0     MTA 
  70   84 f42c 000002717320cf00    2b020 Preemptive  0000027106199738:000002710619B6E8 000002716ae2afd0 0     MTA 
  71   85 148a0 000002717320ee40    2b020 Preemptive  00000271061A1738:00000271061A36E8 000002716ae2afd0 0     MTA 
  72   86 14f50 000002717320dea0  202b020 Preemptive  0000027106197738:00000271061996E8 000002716ae2afd0 0     MTA 
  73   87 14690 000002717320e670  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  74   88 13dd0 0000027173256850  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  75   89 13adc 0000027173257020  202b020 Preemptive  000002710619B738:000002710619D6E8 000002716ae2afd0 0     MTA 
  76   90 13668 0000027173254910  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  77   91 14d78 0000027173258f60  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  78   92 12f54 00000271732558b0  202b020 Preemptive  000002710619F738:00000271061A16E8 000002716ae2afd0 0     MTA 
  79   93 13e38 0000027173252200  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
  80   94 14938 0000027173251a30  202b020 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     MTA 
XXXX   95    0 000002717325a6d0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  81   96 14064 000002717325aea0    27220 Preemptive  0000027106361B90:00000271063636E8 000002716ae2afd0 0     STA 
  82   97 11fb8 000002717325c610    27220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     STA 
XXXX   98    0 000002717325d5b0    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  83   99 13580 000002717325e550  8029220 Preemptive  00000271062F4B28:00000271062F56E8 000002716ae2afd0 0     MTA (Threadpool Completion Port) 
XXXX  100    0 0000027173258790  8039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Completion Port) 
   8  101 7e2c 000002717325fcc0    20220 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  102    0 000002717325dd80    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  103    0 0000027173260490    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  104    0 000002716aea61b0    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  105    0 000002717343f830    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  106    0 0000027173440000    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
  84  107 13848 0000027173444650  1029220 Preemptive  00000271062F2720:00000271062F36E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
XXXX  108    0 0000027173440fa0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  109    0 0000027173441f40  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  110    0 0000027173442710  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  111    0 0000027173444e20  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  112    0 00000271734484d0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  113    0 0000027173448ca0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  114    0 0000027173446d60  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  115    0 0000027173447530  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  85  116 13ec8 0000027173449470  1029220 Preemptive  000002710624CFB8:000002710624D6E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
XXXX  117    0 00000271734436b0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  118    0 0000027173447d00  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  119    0 000002717344dac0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  86  120 137a8 000002717344c350  1029220 Preemptive  0000027106258D60:00000271062596E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
XXXX  121    0 000002717344d2f0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  122    0 0000027173326f50  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
XXXX  123    0 0000027173327ef0  1039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Worker) 
  87  124 1443c 00000271733286c0  1029220 Preemptive  000002710631AEF8:000002710631B6E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
  88  125 13b98 0000027173329660  1029220 Preemptive  0000027106256958:00000271062576E8 000002716ae2afd0 0     MTA (Threadpool Worker) 
XXXX   13    0 000002717332bd70    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  126    0 000002717332d4e0    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  127    0 00000271733332a0    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  128    0 0000027173331b30    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX  129    0 0000027173332300    39820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn 
XXXX    6    0 000002717332f420  8039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Completion Port) 
XXXX  131    0 000002717332e480  8039820 Preemptive  0000000000000000:0000000000000000 000002716ae2afd0 0     Ukn (Threadpool Completion Port) 
  89  130 1404c 0000027173332ad0  8029220 Preemptive  0000027106334438:00000271063356E8 000002716ae2afd0 0     MTA (Threadpool Completion Port) 
  90  132 14cbc 000002717332dcb0  8029220 Preemptive  000002710635C790:000002710635D6E8 000002716ae2afd0 0     MTA (Threadpool Completion Port) 

Когда я выполняю! Syncblk, я получаю следующий вывод, который, как мне кажется, говорит мне, что нет потоков, которым принадлежат какие-либо мониторы:

0:002> !syncblk
Index SyncBlock MonitorHeld Recursion Owning Thread Info  SyncBlock Owner
-----------------------------
Total           351
CCW             49
RCW             15
ComClassFactory 0
Free            35

Когда я переключаюсь на поток, который показывает блокировку, я вижу следующее:

0:002> ~12s
ntdll!NtWaitForMultipleObjects+0x14:
00007ffe'7b5b6c24 c3              ret

Когда я исполняюсь!

 0:000> !runaway
 User Mode Time
  Thread       Time
    0:13010     0 days 0:00:16.203
    6:e444     0 days 0:00:01.687
   81:14064     0 days 0:00:00.281
   40:1232c     0 days 0:00:00.234
   16:14b30     0 days 0:00:00.125
   32:13114     0 days 0:00:00.078
   65:fd9c     0 days 0:00:00.062
   39:14738     0 days 0:00:00.062
   67:13120     0 days 0:00:00.046
   38:f818     0 days 0:00:00.046
   54:14904     0 days 0:00:00.031
    7:14570     0 days 0:00:00.031
   87:1443c     0 days 0:00:00.015
   58:11d88     0 days 0:00:00.015
   48:14bf0     0 days 0:00:00.015
   44:60ec     0 days 0:00:00.015
   42:14d6c     0 days 0:00:00.015
   27:12580     0 days 0:00:00.015
   15:11e04     0 days 0:00:00.015
    2:106e4     0 days 0:00:00.015
   91:149e8     0 days 0:00:00.000
   90:14cbc     0 days 0:00:00.000
   89:1404c     0 days 0:00:00.000
   88:13b98     0 days 0:00:00.000
   86:137a8     0 days 0:00:00.000
   85:13ec8     0 days 0:00:00.000
   84:13848     0 days 0:00:00.000
   83:13580     0 days 0:00:00.000
   82:11fb8     0 days 0:00:00.000
   80:14938     0 days 0:00:00.000
   79:13e38     0 days 0:00:00.000
   78:12f54     0 days 0:00:00.000
   77:14d78     0 days 0:00:00.000
   76:13668     0 days 0:00:00.000
   75:13adc     0 days 0:00:00.000
   74:13dd0     0 days 0:00:00.000
   73:14690     0 days 0:00:00.000
   72:14f50     0 days 0:00:00.000
   71:148a0     0 days 0:00:00.000
   70:f42c     0 days 0:00:00.000
   69:12720     0 days 0:00:00.000
   68:147ec     0 days 0:00:00.000
   66:129a4     0 days 0:00:00.000
   64:ef34     0 days 0:00:00.000
   63:13858     0 days 0:00:00.000
   62:fd58     0 days 0:00:00.000
   61:14a94     0 days 0:00:00.000
   60:12d2c     0 days 0:00:00.000
   59:12e5c     0 days 0:00:00.000
   57:14e34     0 days 0:00:00.000
   56:14e54     0 days 0:00:00.000
   55:12920     0 days 0:00:00.000
   53:12444     0 days 0:00:00.000
   52:14574     0 days 0:00:00.000
   51:14148     0 days 0:00:00.000
   50:1467c     0 days 0:00:00.000
   49:1147c     0 days 0:00:00.000
   47:14028     0 days 0:00:00.000
   46:134cc     0 days 0:00:00.000
   45:132d8     0 days 0:00:00.000
   43:13d70     0 days 0:00:00.000
   41:14504     0 days 0:00:00.000
   37:f764     0 days 0:00:00.000
   36:13a64     0 days 0:00:00.000
   35:1391c     0 days 0:00:00.000
   34:14a38     0 days 0:00:00.000
   33:14068     0 days 0:00:00.000
   31:fde8     0 days 0:00:00.000
   30:f5b4     0 days 0:00:00.000
   29:12390     0 days 0:00:00.000
   28:14388     0 days 0:00:00.000
   26:137c4     0 days 0:00:00.000
   25:10da8     0 days 0:00:00.000
   24:13d78     0 days 0:00:00.000
   23:14a54     0 days 0:00:00.000
   22:131f8     0 days 0:00:00.000
   21:14608     0 days 0:00:00.000
   20:11278     0 days 0:00:00.000
   19:13b9c     0 days 0:00:00.000
   18:143e8     0 days 0:00:00.000
   17:14760     0 days 0:00:00.000
   14:13e34     0 days 0:00:00.000
   13:12ef8     0 days 0:00:00.000
   12:12758     0 days 0:00:00.000
   11:13e40     0 days 0:00:00.000
   10:14c54     0 days 0:00:00.000
    9:13e98     0 days 0:00:00.000
    8:7e2c     0 days 0:00:00.000
    5:14b18     0 days 0:00:00.000
    4:14a48     0 days 0:00:00.000
    3:12da4     0 days 0:00:00.000
    1:14fd8     0 days 0:00:00.000

Я не эксперт в WinDbg или SOS, но кто-то может интерпретировать это для меня? Я думаю, что проблема не в тупике, а, возможно, в бегущей ветке. Как мне поступить Я застрял в этой точке.

Спасибо!

  • 2
    В прошлом я использовал расширение Sosex, в котором есть команда !dlk чтобы показать тупики + некоторые другие вещи, которые могут оказаться полезными.
Теги:
debugging
windbg
sos

2 ответа

3

В этом списке много потоков переднего плана, и все остальные потоки переднего плана будут препятствовать завершению работы CLR, даже если приложение не имеет видимых окон в соответствии с документами Microsoft.

Вы можете определить, какие из них не являются фоновыми, с !ThreadState команды !ThreadState, например:

0:000> !threadstate 2b020
    Legal to Join
    CLR Owns
    CoInitialized
    In Multi Threaded Apartment
    Fully initialized

Используйте значение из столбца State вывода !threads в качестве параметра.

Вернуться к вашему списку, все потоки с состоянием 2b020 или 202b020 находятся на переднем плане. Проверьте их стеки, чтобы связать их с тем местом, где вы их создаете в своем коде.

Сделайте их фоновыми, установив IsBackground свойства IsBackground значение true при их создании. Еще лучше, не создавайте их. Вот хороший список альтернатив: Background Thread? Позвольте мне сосчитать пути....

1

В отличие от C++, потоки в .NET по умолчанию сохраняют приложение работоспособным, даже если основной поток выполняется до конца метода main(). Это означает, что все остальные потоки в вашем приложении также должны достичь своего конца.

Конечно, есть исключения из этого правила:

  • " фоновые " темы будут прерваны
  • вам не нужно заботиться о потоках сборщика мусора и финализатора
  • .NET позаботится о потоках потоков
  • (потенциально другие)

Если вы скажете: "Я все это знал и обдумывал", это нормально. Существует множество тем XXXX, что свидетельствует о том, что эти темы умерли. И это хорошо, если вы хотите, чтобы приложение закрылось.

Так что в остальных темах может возникнуть тупик. Может произойти взаимоблокировка с любым объектом синхронизации, а не только с оператором lock. В .NET у нас много:

  • выражение о lock
  • Monitor (по сути то же самое)
  • ReaderWriterLock
  • ReaderWriterLockSlim
  • Process
  • Thread
  • SpinLock
  • CountDownEvent
  • ...

И, что еще хуже, используя P/Invoke, мы также можем получить доступ ко всем собственным объектам синхронизации:

  • Mutex
  • Semaphore
  • Event
  • WaitableTimer
  • CriticalSection
  • Job
  • ...

Проблема в том, что все эти объекты синхронизации делают отладку тупиком довольно сложной. Положительная сторона: у вас есть все время, которое вы хотите, потому что приложение ждет, чтобы вы проанализировали его.

Мои предложения по анализу тупиковой ситуации:

  1. Возьми аварийную свалку. Многие разработчики не знают, что аварийный дамп все еще полезен, даже если приложение не падало. Это полезно в случае самопроизвольных перезагрузок вашего компьютера, таких как установка обновлений Windows.
  2. В случае .NET запустите !dlk. Это специализированная команда для взаимоблокировок и рассматривает оператор lock Monitor, ReaderWriterLock и собственный CriticalSection. Это большая экономия времени.
  3. !analyze -hang неплохо дает вам отправную точку вашего анализа. Часто это не определяет всю цепочку ожидания, но хорошая отправная точка имеет решающее значение.

Если вы беспокоитесь о "убегающих" потоках, то живое приложение намного лучше. Активный поток должен потреблять процессор, который вы можете увидеть в таких инструментах, как Process Explorer. Сделайте следующее:

  1. Сконфигурируйте символы, если вы хотите сразу увидеть хорошие стеки вызовов
  2. Откройте свойства затронутого процесса
  3. Перейдите на вкладку "Темы"
  4. Следите за тем, что много "Cycles Delta". Инструмент выдаст вам идентификатор этого потока.

В таком случае вам необходимо выяснить, как отменить операцию, над которой работает поток, или отобразить индикатор выполнения, чтобы пользователь мог определить, когда программа завершит работу.

Предполагая, что вы ожидали завершения программы более 16 секунд, неудавшаяся нить, скорее всего, не ваша проблема.

  • 0
    Было бы здорово узнать, почему этот ответ «бесполезен». Я забочусь о вопросах в windbg и хочу дать качественные ответы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню