2008-10-02 9 views
11

मैं एक C++ समारोह के दो भार के है और मैं उनमें से एक पर एक ब्रेकपाइंट सेट करना चाहते हैं:विंडबग: सी ++ फ़ंक्शन के ओवरलोड में से किसी एक पर ब्रेकपॉइंट कैसे सेट करें?

0:000> bu myexe!displayerror 
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *) 
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT) 
Ambiguous symbol error at 'myexe!displayerror' 

ओह मैं सभी भार के पर breakpoints स्थापित करने के साथ ठीक हो जाएगा, लेकिन यह पता लगाने नहीं कर पा रहे कैसे:

0:000> bu myexe!displayerror* 
Matched: 00000000`ff3c6100 myexe!displayError (int, HRESULT, wchar_t *) 
Matched: 00000000`ff3c60d0 myexe!displayError (int, HRESULT) 
Ambiguous symbol error at 'myexe!displayerror*' 

उत्तर

7

प्रयास करें:

bu 0xff3c6100 

अगर मैं सही याद है, WinDbg breakpoints पते के द्वारा भी स्थापित करने की अनुमति देता है।

4

क्या आपने "बीएम myexe! Displayerror *" की कोशिश की है?

2
bm myexe!displayerror 

यह breakpoints सब सब भार के सेट हो जाएगा, की तुलना में आप लोगों को स्पष्ट करने के लिए bc का उपयोग आप

bc 1-3 

नहीं करना चाहते या सिर्फ उन्हें

bd 1-3 

समस्या को निष्क्रिय bm साथ यह है कि यह जो ब्रेकपॉइंट बनाता है वह कभी-कभी मूल्यांकन करने और ब्रेक ट्रिगर करने में विफल रहता है। कभी-कभी परेशान करना।

3

बीपी @@ (MyClass :: MyMethod) तरीकों पर ब्रेक (उपयोगी अगर एक ही विधि का ओवरलोड हो गया है और इस तरह कई पतों पर अब तक)

1

सभी प्रवेश बिंदु के लिए अपने dll खोजें अपने प्रतीक मिलान

x myexe!displayerror 

इस वसीयत उत्पादन खोज स्ट्रिंग और उनके प्रवेश बिंदुओं मिलान सभी प्रतीकों, तो पता

bp ff3c6100 // for myexe!displayError (int, HRESULT, wchar_t *) 

यह एक विशिष्ट breakp सेट हो जाएगा पर ब्रेकपाइंट सेट ओंट जब वह पता मारा जाता है, या आप दूसरे पते के खिलाफ बीपी सेट करते हैं। तुम्हें पता है, सेट कर सकते हैं ब्रेकप्वाइंट सिर्फ एक बार हिट करने के लिए ब्रेकपाइंट और बाहर निकलने

bp /1 ff3c6100 

स्पष्ट और आप भी इस तरह के रूप कॉल स्टैक डंप, चर और जारी रखने के आदेश पर अमल कर सकते हैं:

bp ff3c6100 "kb;dv;g" 

तुम भी हो सकता है बस WinDbg संलग्न होने पर अपना स्रोत कोड खोलें, उस कोड की रेखा पर नेविगेट करें जिसे आप ब्रेकपॉइंट सेट करना चाहते हैं और F9 दबाएं (जैसा कि आप विजुअल स्टूडियो का उपयोग करते हैं), यह उस लाइन पर ब्रेकपॉइंट सेट करने से पहले थोड़ी देर के लिए रुक जाएगा, यह मानता है कि आपके पास स्रोत कोड तक पहुंच है।