2011-10-17 14 views
9

समस्या: मुझे एक स्क्रिप्ट या अभिव्यक्ति बनाने की आवश्यकता है जो कॉलस्टैक पर किसी विशिष्ट नाम के साथ कोई फ़ंक्शन नहीं तोड़ता है।विंडबैग सेट सशर्त ब्रेकपॉइंट्स जो कॉल स्टैक पर निर्भर करता है

विशिष्ट प्रश्न: मैं तारों की सूची में कॉलस्टैक पर फ़ंक्शंस कैसे प्राप्त कर सकता हूं?

उदाहरण:

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


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

मैं Module!MyFunctionWithConditionalBreakpoint चाहते कॉल से Module!ClassA:MemberFunction

cames अगर केवल तोड़ने के लिए मैं अप्रबंधित कोड में इस की जरूरत है। प्रबंधित समाधान की तरह

System.Diagnostics.StackTrace कुछ है() toString() शामिल हैं ("YourMethodName")

उत्तर

11

WinDbg में आप विशेष $ विवाद समारोह का उपयोग कर एक सशर्त ब्रेकप्वाइंट निर्धारित कर सकते हैं:।।

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

छद्म कोड में यह हो जाएगा कुछ की तरह:

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

अच्छा काम करता है। धन्यवाद – cprogrammer

1

मॉड्यूल में प्रवेश करने पर ब्रेकपॉइंट क्यों सेट न करें! कक्षा: मॉड्यूल के लिए ब्रेकपॉइंट सक्षम करने के लिए सदस्य समारोह! MyFunctionWithConditionalBreakpoint और मॉड्यूल छोड़ने पर! कक्षा: सदस्य समारोह इसे अक्षम कर रहा है?

+0

क्या यह स्वचालित हो सकता है? –

संबंधित मुद्दे

 संबंधित मुद्दे