2016-03-15 16 views
6

.NET application dökümündeki varsayılan TaskScheduler içeriğine ulaşmaya çalışıyorum. Bunu nasıl yapabilirim?Bir .NET uygulamasının dökümünde varsayılan TaskScheduler içeriği nasıl bulunur?

Bir uygulama asıldı.

application was hung

varsayılan zamanlayıcısı belli delegate ile delayed task içerdiğinden emin olun gerekir.

+2

@LievenKeersmaekers: Bence https://msdn.microsoft.com/en-US/library/system.threading.tasks.taskscheduler%28v=vs.110%29 ([TaskScheduler] bahsediyor .aspx) sınıf –

+0

Evet, TaskScheduler sınıfı hakkında konuşuyorum. Özellikle [TaskScheduler.Default özelliği] hakkında (https://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.default (v = vs.110) .aspx) –

+0

Düzenli mi '.dmp'? Visual Studio'da açmayı deneyin. Yeterli semboller verildiğinde, hata ayıklayıcının görevlerin bir özetini gösterebilmesi gerekir (Hata ayıklama -> Windows -> Görevler). Eğer kısmi bir çöplükse veya sembolünüz yoksa, bu işe yaramaz, ama denemeye değer. –

cevap

1

Birincisi, bu tür bazı nesneleri bulmak için yığın dökümü, Sonra TaskScheduler

0:025> .loadby sos clr 
0:025> .symfix c:\debug\symbols 
0:025> !name2ee mscorlib.dll System.Threading.Tasks.TaskScheduler 
Module:  000007feeea11000 
Assembly: mscorlib.dll 
Token:  000000000200052e 
MethodTable: 000007feef0a8ab0 
EEClass:  000007feeebde1a8 
Name:  System.Threading.Tasks.TaskScheduler 

yöntemi tabloyu bulun. Burada TaskScheduler ile bir uygulama olmadığı için burada String kullandığımı unutmayın.

0:025> !dumpheap -mt <MethodTable> 

Artık bazı nesneleriniz varsa, bunlardan birini boşaltın.

0:025> !do 00000000126ed548 
Name:  System.String 
MethodTable: 000007feef0bda88 
EEClass:  000007feeea16a08 
Size:  34(0x22) bytes 
File:  C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll 
String:  100% 
Fields: 
       MT Field Offset     Type VT  Attr   Value Name 
000007feef0c03d0 4000243  8   System.Int32 1 instance    4 m_stringLength 
000007feef0bec38 4000244  c   System.Char 1 instance    31 m_firstChar 
000007feef0bda88 4000248  80  System.String 0 shared   static Empty 

Bildirim dize için shared (statik) mülkiyet Empty. Statik özellik Default için TaskScheduler benzer bir şey almalısınız. Gördüğünüz gibi hiçbir şey göremezsiniz. Bu nedenle, SOSEX uzantısına ihtiyacınız var ve !mdt System.Threading.Tasks.TaskScheduler.

0:025> !mdt System.String 
System.String 
[...] 
    [s]Empty: string 
     AppDomain 'Test.exe' (0000000001d73470): 0000000011fc1420[System.String] STRVAL= 
+1

Bu cevabın, soruyla ilgili herhangi bir sonuç vermesi olası değildir. TaskScheduler.Default tarafından planlanan görevler çoğu uygulamanın sınıfının herhangi bir özellik özelliğinde bulunmaz (özellikle ThreadPoolTaskScheduler' değil). Gerçek bir cevap daha çok dahil. –

+0

@JeroenMostert: yorumlarda da belirtildiği gibi, istediği buydu. Sorunu çözmezse, bu farklı bir hikaye. Daha iyi bir cevap biliyorsanız, bunu duyduğuma sevinirim. Reddetmekten çekinmeyin. –

İlgili konular