2011-01-06 9 views
8

でコマンドをどのように管理するスレッドを相関させるために、スレッド、私は次のようしている:のWinDbg/SOS:!System.Threading.ThreadインスタンスのWinDbgとSOSを使用して

0:011> !threads 
ThreadCount: 7 
UnstartedThread: 0 
BackgroundThread: 4 
PendingThread: 0 
DeadThread: 2 
          PreEmptive GC Alloc    Lock  
     ID ThreadOBJ State  GC  Context  Domain Count APT Exception 
    0 618 0015b350  20 Enabled 00000000:00000000 0017b720  0 Ukn 
    2 624 0016f508  b220 Enabled 00000000:00000000 0017b720  0 MTA (Finalizer) 
    9 e48 001c13d0  1220 Enabled 00000000:00000000 0017b720  0 Ukn 
10 e8c 048c6a40 1800220 Enabled 00c296a8:00c2ab44 0017b720  0 MTA (Threadpool Worker) System.NullReferenceException 
XXX  0 00224138  1820 Enabled 00000000:00000000 0017b720  0 MTA 
XXX  0 001d5b50  1820 Enabled 00000000:00000000 0017b720  0 Ukn 
11 564 00166318 1800220 Enabled 00c2cf30:00c2eb44 0017b720  0 MTA (Threadpool Worker) 
0:011> !dumpheap -type System.Threading.Thread 
Address  MT  Size 
00b16478 79bba7a4  60 
00b41a7c 79bca7ac  28 
00b41a98 79bba7a4  60 
00b41ecc 79bba7a4  60 
00bf1e20 79bca7ac  28 
00bf1e3c 79bba7a4  60 
00c03b34 79bca7ac  28 
00c03b50 79bba7a4  60 
total 8 objects 
Statistics: 
     MT Count TotalSize Class Name 
79bca7ac  3  84 System.Threading.ThreadStart 
79bba7a4  5  300 System.Threading.Thread 
Total 8 objects 

私の質問は:どのように私はどのインスタンスを決定することができますヒープ上のSystem.Threading.Threadは、実際に実行されている管理スレッドのどれに対応しています。

更新日: これは.NET 1.1アプリケーションのデバッグです。このバージョンで 私がこのような出力を得る!DumpObj

0:000> !dumpobj 00b16478 
Name: System.Threading.Thread 
MethodTable 0x79bba7a4 
EEClass 0x79bba9d4 
Size 60(0x3c) bytes 
mdToken: 020000ec (c:\windows\microsoft.net\framework\v1.1.4322\mscorlib.dll) 
FieldDesc*: 79bbaa38 
     MT Field Offset     Type  Attr Value Name 
79bba7a4 4000337  4    CLASS instance 00000000 m_Context 
79bba7a4 4000338  8    CLASS instance 00000000 m_LogicalCallContext 
79bba7a4 4000339  c    CLASS instance 00000000 m_IllogicalCallContext 
79bba7a4 400033a  10    CLASS instance 00000000 m_Name 
79bba7a4 400033b  14    CLASS instance 00000000 m_ExceptionStateInfo 
79bba7a4 400033c  18    CLASS instance 00000000 m_Delegate 
79bba7a4 400033d  1c    CLASS instance 00000000 m_PrincipalSlot 
79bba7a4 400033e  20    CLASS instance 00000000 m_ThreadStaticsBuckets 
79bba7a4 400033f  24    CLASS instance 00000000 m_ThreadStaticsBits 
79bba7a4 4000340  28    CLASS instance 00000000 m_CurrentCulture 
79bba7a4 4000341  2c    CLASS instance 00000000 m_CurrentUICulture 
79bba7a4 4000342  30   System.Int32 instance  2 m_Priority 
79bba7a4 4000343  34   System.Int32 instance 1422160 DONT_USE_InternalThread 
79bba7a4 4000344  0    CLASS  shared static m_LocalDataStoreMgr 
    >> Domain:Value 0017b720:00b162e8 << 

答えて

3

です!threads出力。

9

マネージスレッドがメンバ変数がm_ManagedThreadIdたm_ManagedThreadIDが!スレッド出力の「ID」に対応

0:000> !do 02f34b84 
Name:  System.Threading.Thread 
MethodTable: 5259ffcc 
EEClass:  522d8ed8 
Size:  48(0x30) bytes 
File:  C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll 
Fields: 
     MT Field Offset     Type VT  Attr Value Name 
52588a28 4000720  4 ....Contexts.Context 0 instance 02f7dc78 m_Context 
5259b468 4000721  8 ....ExecutionContext 0 instance 02f3d4d4 m_ExecutionContext 
5259f9ac 4000722  c  System.String 0 instance 00000000 m_Name 
5259fe80 4000723  10  System.Delegate 0 instance 00000000 m_Delegate 
525a63a4 4000724  14 ...ation.CultureInfo 0 instance 00000000 m_CurrentCulture 
525a63a4 4000725  18 ...ation.CultureInfo 0 instance 00000000 m_CurrentUICulture 
5259f5e8 4000726  1c  System.Object 0 instance 00000000 m_ThreadStartArg 
5259aa2c 4000727  20  System.IntPtr 1 instance 4b6c18 DONT_USE_InternalThread 
525a2978 4000728  24   System.Int32 1 instance  2 m_Priority 
525a2978 4000729  28   System.Int32 1 instance  1 m_ManagedThreadId 

0:000> !t 
ThreadCount:  17 
UnstartedThread: 0 
BackgroundThread: 9 
PendingThread: 0 
DeadThread:  7 
Hosted Runtime: no 
            PreEmptive GC Alloc    Lock 
     ID OSID ThreadOBJ State GC   Context  Domain Count APT Exception 
    0 1 390 004b6c18  6020 Enabled 0d98d408:0d98e080 004a85c8  0 STA 
    4 2 790 004c5028  b220 Enabled 00000000:00000000 004a85c8  0 MTA (Finalizer) 
    5 3 15e4 00555fd0  b220 Enabled 00000000:00000000 004a85c8  0 MTA 
XXXX 5  060c27d8  19820 Enabled 00000000:00000000 004a85c8  0 Ukn 
    7 6 84c 060c41f0 200b220 Enabled 00000000:00000000 004a85c8  0 MTA 
    14 7 1aec 0611a760 200b220 Enabled 00000000:00000000 004a85c8  1 MTA 
    17 8 ea0 08c787c8 200b220 Enabled 00000000:00000000 004a85c8  0 MTA 
XXXX 9  0b409580  19820 Enabled 00000000:00000000 004a85c8  0 Ukn 
XXXX a  08cee2d0  19820 Enabled 00000000:00000000 004a85c8  0 Ukn 
XXXX b  08ceebc8  19820 Enabled 00000000:00000000 004a85c8  0 Ukn 
XXXX c  0b409a78  19820 Enabled 00000000:00000000 004a85c8  0 Ukn 
XXXX d  0b40a248  19820 Enabled 00000000:00000000 004a85c8  0 Ukn 
XXXX e  0b40b218  19820 Enabled 00000000:00000000 004a85c8  0 Ukn 
    20 f 16d0 08cc1ad0 8009220 Enabled 00000000:00000000 004a85c8  0 MTA (Threadpool Completion Port) 
    21 10 1ab4 0b4163f0 1009220 Enabled 0d9601ac:0d962080 004a85c8  0 MTA (Threadpool Worker) 
    22 11 1924 0b40ef88 1009220 Enabled 0d9036c8:0d905554 004a85c8  0 MTA (Threadpool Worker) 
    23 4 14d8 0b416ce0 100a220 Enabled 00000000:00000000 004a85c8  0 MTA (Threadpool Worker) 

次に、管理対象スレッドオブジェクトとそのIDをダンプする簡単なスクリプトを示します。

ここで
.foreach ($t {!dumpheap -mt 5259ffcc -short}) { .printf " Thread Obj ${$t} and the Thread Id is %N \n",poi(${$t}+28) }  

は、私は今、私のSystem.Threading.ThreadオブジェクトのDONT_USE_InternalThreadフィールドの値は、中見出しThreadOBJの下に表示されて進値の10進数であることがわかり上記.foreachからの出力

0:000> .foreach ($t {!dumpheap -mt 5259ffcc -short}) { .printf " Thread Obj ${$t} and the Thread Id is %N \n",poi(${$t}+28) }  
Thread Obj 02f34b84 and the Thread Id is 00000001 
Thread Obj 02f3d44c and the Thread Id is 00000003 
Thread Obj 02f5f180 and the Thread Id is 00000005 
Thread Obj 02f5f504 and the Thread Id is 00000006 
Thread Obj 02f87780 and the Thread Id is 00000007 
Thread Obj 03bdf8d8 and the Thread Id is 0000000C 
Thread Obj 03bdff54 and the Thread Id is 00000008 
Thread Obj 03d23f48 and the Thread Id is 00000009 
Thread Obj 03d2491c and the Thread Id is 0000000A 
Thread Obj 03d24a5c and the Thread Id is 0000000B 
Thread Obj 03d24d34 and the Thread Id is 0000000D 
Thread Obj 03d24ed8 and the Thread Id is 0000000E 
Thread Obj 03d2bd24 and the Thread Id is 00000010 
Thread Obj 03e48300 and the Thread Id is 00000002 
Thread Obj 08f12f90 and the Thread Id is 00000011 
+0

お返事ありがとうございます。私はそれがそれのようなものでなければならないと思った。しかし、古い.NET 1.1アプリケーションをデバッグしていて、Thread 1.1にはm_ManagedThreadIDフィールドがありません。 –

関連する問題