यहां एक और समाधान है, जो पहले की तरह सुरुचिपूर्ण नहीं है, लेकिन यदि आपने अपवाद ब्रेकप्वाइंट या हैंडलर को नहीं जोड़ा है, तो यह केवल एक ही रास्ता हो सकता है।
जब ऐप क्रैश हो जाता है, और आपको अपना कच्चा पहला थ्रो कॉल स्टैक (हेक्स संख्या में) मिलता है, info line *hex
तो Xcode कंसोल में टाइप करें (स्टार और 0x
हेक्स स्पेसर को न भूलें ), उदाहरण के लिए:
(gdb) info line *0x2658
Line 15 of "path/to/file/main.m" starts at address 0x25f2 <main+50>
and ends at 0x267e <main+190>.
यदि आप lldb का उपयोग कर रहे हैं , तो आप टाइप कर सकते हैं image lookup -a hex
(इस स्थिति में स्टार के बिना), और आपको समान आउटपुट मिलता है।
इस पद्धति के साथ, आप अपने फ़ंक्शन को फेंक स्टैक (ऊपर लगभग 5-7 सिस्टम अपवाद प्रचारक होंगे) से पार कर सकते हैं जो एक दुर्घटना का कारण बना, और सटीक फ़ाइल और कोड की लाइन निर्धारित करता है।
इसके अलावा, इसी तरह के प्रभाव के लिए आप टर्मिनल में एटोस उपयोगिता का उपयोग कर सकते हैं, बस टाइप करें:
atos -o path/to/AplicationBundle.app/Executable 0xAdress1 0xAdress2 0xAdress3 ...
और आपको प्रतीकात्मक स्टैक ट्रेस मिलता है (कम से कम फ़ंक्शंस के लिए आपके पास डीबग प्रतीक हैं)। यह विधि अधिक बेहतर है, क्योंकि आपके पास प्रत्येक info line
एड्रेस कॉल के लिए नहीं है , बस कंसोल आउटपुट से एड्रेसों को कॉपी करें और उन्हें टर्मिनल में पेस्ट करें।