2011-10-17 13 views
9

Sorun: Calltack'in bir yerinde belirli bir ada sahip bir işlevse, bu durumun kırılmadığı bir komut dosyası veya ifade oluşturmam gerekiyor.Windbg Çağrı Yığına bağlı Koşullu Kesme Noktalarını Ayarla

Özel soru: Bir dizeler listesine calltack işlevlerini nasıl edinebilirim?

Örnek:

Module!MyFunctionWithConditionalBreakpoint  
Module!Function1 
Module!Function2  
Module!Function3 


Module!MyFunctionWithConditionalBreakpoint  
Module!Function1 
Module!ClassA:MemberFunction  
Module!Function3 

Ben çağrı Module!ClassA:MemberFunction

gelen cames yalnızca kırmak Module!MyFunctionWithConditionalBreakpoint istiyorum ben yönetilmeyen kod buna ihtiyaç duyarlar. Yönetilen çözüm

System.Diagnostics.StackTrace gibi bir şey() ToString() içerir ("YourMethodName") özel $ tükürdü işlevini kullanarak bir koşullu kesme noktası ayarlayabilirsiniz WinDbg içinde

cevap

11

:..

pseudo-code
bp Module!MyFunctionWithConditionalBreakpoint "r $t0 = 0;.foreach (v { k }) { .if ($spat(\"v\", \"*Module!ClassA:MemberFunction*\")) { r $t0 = 1;.break } }; .if($t0 = 0) { gc }" 

öyle olacak gibi bir şey:

t0 = 0 
foreach (token in k-command result) { 
    if (token.contains("Module!ClassA:MemberFunction")) { 
    t0 = 1 
    break 
    } 
} 
if (t0 == 0) { 
    // continue execution 
} else { 
    // break into the debugger 
} 
+0

harika çalışıyor. teşekkürler – cprogrammer

1

Neden Modül girilirken bir kesme noktası ayarlanmıyor ClassA: Modül için bir kesme noktası etkinleştirmek için MemberFunction! MyFunctionWithConditionalBreakpoint ve Modülden ayrılıyor! ClassA: MemberFunction devre dışı bırakılıyor mu?

+0

Bu otomatik olabilir mi? –

İlgili konular