2012-11-30 34 views
8

साथ विधि नाम दुर्घटनाग्रस्त हो गया करने के लिए निर्धारित मैं एक उपयोगकर्ता से कंसोल स्टैक (नहीं क्रैश रिपोर्ट) है, और मुझे पता करें कि किस विधि कॉल अपने आवेदन में पिछले आदमी खड़ा था कोशिश कर रहा हूँ।का उपयोग रफ dSYM

मैं आवेदन वे उपयोग कर रहे थे का कौन सा संस्करण जानते हैं, और मुझे लगता है कि रिहाई/डीबग बिल्ड की एक प्रति है, संग्रहित प्रति के लिए dSYM फ़ाइल के साथ।

लेकिन, जब मैं atos उपयोग करने के लिए स्मृति पता थूक से बाहर करने की कोशिश है, यह मदद करने के लिए प्रतीत नहीं होता। (मैं नीचे ढेर से 0x000000010e703bc0 उपयोग कर रहा हूँ।)

craig-mbp:Desktop Craig$ atos -o MyApp.app_1.0.0.dSYM/Contents/Resources/DWARF/MyApp -arch x86_64 
0x000000010e703bc0 (<- entered by me) 
0x000000010e703bc0 (<- console output) 

मैं एक किसी प्रकार की भरपाई में प्रवेश करने की जरूरत है? या उपयोगकर्ता द्वारा प्रदान किए गए पते के आधार पर, मेरे प्रोग्राम के मेमोरी ब्लॉक के अंदर वास्तविक स्थान निर्धारित करने के लिए किसी प्रकार का मेमोरी पता गणित?

28/11/12 10:48:56.220 AM MyApp[411] (
    0 CoreFoundation      0x00007fff8fee90a6 __exceptionPreprocess + 198 
    1 libobjc.A.dylib      0x00007fff8e94a3f0 objc_exception_throw + 43 
    2 CoreFoundation      0x00007fff8fee8e7c +[NSException raise:format:] + 204 
    3 Foundation       0x00007fff92b1ce5c -[NSPlaceholderString initWithString:] + 93 
    4 Foundation       0x00007fff92b1cde4 +[NSString stringWithString:] + 43 
    5 MyApp        0x000000010e703bc0 MyApp + 23488 
    6 MyApp        0x000000010e70a038 MyApp + 49208 
    7 MyApp        0x000000010e70b41a MyApp + 54298 
    8 MyApp        0x000000010e70bb92 MyApp + 56210 
    9 Foundation       0x00007fff92b22db5 __NSFireDelayedPerform + 358 
    10 CoreFoundation      0x00007fff8fea5da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 
    11 CoreFoundation      0x00007fff8fea58bd __CFRunLoopDoTimer + 557 
    12 CoreFoundation      0x00007fff8fe8b099 __CFRunLoopRun + 1513 
    13 CoreFoundation      0x00007fff8fe8a6b2 CFRunLoopRunSpecific + 290 
    14 HIToolbox       0x00007fff8b31c0a4 RunCurrentEventLoopInMode + 209 
    15 HIToolbox       0x00007fff8b31be42 ReceiveNextEventCommon + 356 
    16 HIToolbox       0x00007fff8b31bcd3 BlockUntilNextEventMatchingListInMode + 62 
    17 AppKit        0x00007fff948e7613 _DPSNextEvent + 685 
    18 AppKit        0x00007fff948e6ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128 
    19 AppKit        0x00007fff948de283 -[NSApplication run] + 517 
    20 AppKit        0x00007fff94882cb6 NSApplicationMain + 869 
    21 MyApp        0x000000010e6ffab4 MyApp + 6836 

उत्तर

14

यह एक लोड का पता उम्मीद कर रहा है:

यह स्टैक ट्रेस मैं प्राप्त की समग्रता है। आप की कोशिश की है:

atos -o MyApp.app_1.0.0.dSYM/Contents/Resources/DWARF/MyApp -arch x86_64 -l 0x000000010E6FE000 

मैं 0x000000010e6ffab4 से 6836 (Base10) को घटा कर अपने उदाहरण से 0x000000010E6FE000 मिलता है ... या आप MyApp के लिए वहाँ से पता चला अन्य गणित से कोई भी आइटम इस्तेमाल कर सकते हैं।

यहां मेरे हालिया दुर्घटनाओं में से एक उदाहरण है, जहां 0x2d000 क्रैश लॉग से स्पष्ट था। पहली पंक्ति वह है जिसे मैंने कमांड लाइन पर दर्ज किया था। उसके बाद की हर दूसरी पंक्ति प्रोग्राम आउटपुट (कृत्रिम रूप से $ या $> के साथ मेरे इनपुट को इंडेंट कर रही है ... स्क्रीन पर ऐसा कोई संकेत नहीं है)।

$ atos -o /x/xcode/DerivedData/Xxxx/Build/Products/Debug-iphoneos/Xxxx.app.dSYM/Contents/Resources/DWARF/Xxxx -l 0x2d000 
got symbolicator for /x/xcode/DerivedData/Xxxx/Build/Products/Debug-iphoneos/Xxxx.app.dSYM/Contents/Resources/DWARF/Xxxx, base address 1000 
$> 0x0002f9a6 
0x000039a6 (in Xxxx) 
$> 0x0002f940 
0x00003940 (in Xxxx) 
$> 0x000c70f6 
-[TFHTTPOperation connection:didReceiveData:] (in Xxxx) + 754 
+0

यह सही था - मुझे केवल 6868' को बेस 10 में परिवर्तित करने और स्मृति पते से घटाना था। (फिर उस स्लाइड मान को 'एटोस' में पास करें।) अब मेरे पास एक पूरी तरह से प्रतीकात्मक स्टैक ट्रेस है, आपको बहुत धन्यवाद। –