2015-04-16 8 views
11

मैं lldb का उपयोग कर उद्देश्य सी क्लास में सभी विधियों पर ब्रेकपॉइंट सेट करने को स्वचालित कैसे कर सकता हूं?कक्षा उद्देश्य में सभी विधियों पर lldb breakpoint c

यह एक जटिल विरासत वर्ग के व्यवहार को सीखने के लिए उपयोगी है। मैं आईओएस विकास के लिए एक्सकोड (एलएलडीबी शामिल करता हूं) का उपयोग कर रहा हूं, और यह एक्सकोड में मैन्युअल रूप से (बड़ी) फ़ाइल के माध्यम से जाने के लिए बोझिल है और ब्रेकपॉइंट्स सेट करने के लिए प्रत्येक विधि के बगल में गटर पर क्लिक करें।

उत्तर

17

एक विकल्प रेगेक्स ब्रेकपॉइंट्स का उपयोग करना है।

breakpoint set -r '\[ClassName .*\]$' 

आप अपनी आवश्यकताओं के अनुसार रेगेक्सपी के साथ खेल सकते हैं।

कमांड एक ब्रेकपॉइंट तैयार करेगा जो सभी विधियों पर रोकता है उस वर्ग द्वारा लागू किया गया। हालांकि, superclasses से विरासत में प्राप्त विधियों पर कोई ब्रेकपॉइंट नहीं होगा।

सुपरक्लास पर विधियां प्राप्त करने के लिए, आपको एक सशर्त ब्रेकपॉइंट का उपयोग करना होगा। 86 परिवर्तन (id)$arg1 लिए

br s -r '\[UIViewController .*\]$' -c '(BOOL)[(id)$arg1 isKindOfClass:[CustomVC class]]' 

*(id*)($ebp+8) रहे हैं: उदाहरण के लिए, अगर सुपर क्लास UIViewController है, तो आप की तरह कुछ कर सकता है।

अंत में, यदि आप वास्तव में विभिन्न वर्गों के माध्यम से नियंत्रण प्रवाह के बारे में जानना चाहते हैं, तो dtrace देखें। यह शायद डीबगर से अधिक उपयुक्त है।

+0

मैं उलझन में हूं कि आपका मतलब क्या है \ \ [क्लासनाम (\ (। * \))। * \] $ ', हालांकि' \ [FooViewController। * \] $ 'मेरे लिए चाल है। मुझे यह भी पसंद है कि ब्लॉक पर $ कारण ब्रेकपॉइंट्स भी छोड़ दें। Superclass विधियों पर तोड़ने के लिए regex भी अच्छा है। सुझावों के लिए धन्यवाद, और मैं dtrace की जांच सुनिश्चित करूँगा। – tboyce12

+0

'(\ (। * \)) के बाद'? 'होना चाहिए था। वह हिस्सा श्रेणियों से मेल खाना है, उदा। '- [UIView (ज्यामिति) सेटफ्रेम:]'। मैं इसे बाहर ले जाऊंगा क्योंकि यह आवश्यक नहीं होना चाहिए। –

+0

जहां मैं यह आदेश लिखता हूं। कृपया कंसोल पर या टर्मिनल पर या कोड में सुझाव दें। – Chandni

3
br se -f FooViewController.m -p '^@property|^ *- *\(' 

"br se" "ब्रेकप्वाइंट सेट" के लिए कम है, -f तर्क को अपने स्वयं के फ़ाइल नाम गुजरती हैं, और -p तर्क उद्देश्य सी

चेतावनियां में गुण और तरीकों के लिए एक कच्चे regex है : यह .h फ़ाइलों के लिए काम नहीं करता है, इसलिए यदि आपके पास उस शीर्षलेख में घोषित गुण हैं जिन्हें आप देखना चाहते हैं तो आपको उनके बैकिंग इंस्टेंस चर पर वॉचपॉइंट सेट करने की आवश्यकता हो सकती है।

यह अब तक का सबसे अच्छा समाधान है, कृपया वैकल्पिक समाधान पोस्ट करें यदि आपको लगता है कि वे सहायक होंगे।

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