2011-09-30 12 views
6

मैं किसी समस्या को डिबग कर रहा हूं, और मैं प्रत्येक विधि कॉल को तोड़ना चाहता हूं जिसमें विशिष्ट वस्तु है 'इस' पैरामीटर के रूप में। क्या यह जीडीबी में संभव है?ऑब्जेक्ट फ़ंक्शन कॉल पर जीडीबी ब्रेक

+0

क्या आपका मतलब एक विशिष्ट पता है? आप इस सूचक से ऑब्जेक्ट प्रकार नहीं प्राप्त कर सकते हैं। – Pubby

+0

आपको एक सशर्त ब्रेकपॉइंट का उपयोग करना होगा। वे मौजूद हैं, लेकिन मुझे नहीं पता कि उन्हें कैसे सेट अप किया जाए। जीडीबी काफी हद तक मेरे लिए एक रहस्य है, और इसके चारों ओर विभिन्न guis इसे सुलभ बनाने के लिए अस्पष्ट करने के लिए और अधिक करते हैं। – Omnifarious

+0

मेरा मतलब एक विशिष्ट एड्रेस है - मेरे पास एक वस्तु है जो चारों ओर चिपक रही है, और मैं जानना चाहता हूं कि उस पर क्या कहा जाता है। –

उत्तर

0

यह पैरामीटर केवल कक्षाओं में शामिल विधियों को ही होना चाहिए। इसलिए आपको उस वर्ग के सभी तरीकों के लिए ब्रेकपॉइंट्स सेट करने की आवश्यकता होनी चाहिए, जिसे आप देख रहे हैं। मुझे यकीन नहीं है कि ऐसा करने का एक आसान तरीका है।

+0

मुझे लगता है कि ओपी के मन में एक विशिष्ट विधि थी। लेकिन मुझे संदेह है कि आपकी व्याख्या अधिक सही है। आप एक विधि के लिए इस तरह के ब्रेकपॉइंट कैसे स्थापित करेंगे? – Omnifarious

5

यह आसान है। आप b A::a if (this==0x28ff1e) जैसे कमांड का उपयोग कर सकते हैं।

+0

क्या 'ए :: ए' के ​​स्थान पर वाइल्डकार्ड निर्दिष्ट करना संभव है जो 'ए' कक्षा में सभी विधियों के नाम से मेल खाता है? – Omnifarious

+0

मुझे gdb में वाइल्डकार्ड का उपयोग करने का कोई तरीका नहीं पता है, शायद उसे ब्रेक सेट करने के लिए कमांड उत्पन्न करने के लिए एक प्रोग्राम की आवश्यकता है। – user685684

+5

@NathanielFlath - आपको पता है कि मुझे आश्चर्य है कि gdb 'rbreak' कमांड जो आप चाहते हैं वह नहीं कर सकता है ... – Omnifarious

0

मैं हर विधि कॉल 'इस' पैरामीटर के रूप में एक विशेष वस्तु है पर तोड़ने के लिए चाहते हैं

इसका मतलब यह है कि आप एक विशेष वर्ग के हर सदस्य समारोह पर तोड़ने के लिए चाहते हैं जो वस्तु के लिए तत्काल किया गया है।

की सुविधा है कि सभी सदस्य कार्यों के लिए एक विशेष cpp फाइल में परिभाषित कर रहे हैं के लिए मान लीजिए जैसे myclass_implementation.cpp

आप इस तरह से myclass_implementation.cpp अंदर हर कार्य पर ब्रेकप्वाइंट लागू करने के लिए gdb का उपयोग कर सकते हैं:

rbreak myclass_implementation.cpp:. 

लेट्स मान लें कि आप कुछ विशिष्ट कार्यों जैसे कि गेटर फ़ंक्शंस जैसे ब्रेकपॉइंट्स को शुरू करने के लिए उपयोग करना चाहते हैं, तो आप ब्रेकपॉइंट्स को इस तरह से लागू करने के लिए जीडीबी का उपयोग कर सकते हैं:

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