2017-01-17 8 views
12

में बाइनरी डाइलीब को स्रोत संलग्न करना मेरे आईओएस ऐप में एक डाइलीब के साथ एक ढांचा है जिसे किसी अन्य मशीन पर संकलित किया गया था। मैं अपने मशीन पर सूत्रों का कहना है की जाँच की और lldb को निर्देश का उपयोग कर स्रोत कोड पथ को मैप करने की कोशिश की: कोई लाभ उठाने के लिएएक्सकोड

settings set target.source-map /source/code/path/in/dylib/prefix /source/code/path/on/my/machine/prefix 

, अभी भी विधानसभा देखकर।

नोट # 1: डिलिब को एक्सकोड के उसी संस्करण में सी ++ कोड से संकलित किया गया था।

नोट # 2: मुझे यह निर्धारित करने के लिए nm -pa /path/to/dylib का उपयोग किया गया है कि फ़ाइल पथ डीबग जानकारी में एम्बेड किए गए हैं या नहीं, और वे हैं, lldb किसी कारण से नहीं खेलता है। https://medium.com/@maxraskin/background-1b4b6a9c65be

उत्तर

4
:

धन्यवाद

अद्यतन

मैं नीचे जिम Ingham के जवाब पीछा किया और एक स्क्रिप्ट है कि इस को स्वचालित बनाने के बाद, स्क्रिप्ट इस लेख में एक सार लिंक मैंने लिखा रूप में उपलब्ध है

एक मशीन पर बनाए गए कोड को डीबग करने के लिए, लेकिन किसी अन्य पर डिबग किया गया है, आपको एक डीएसवाईएम बनाना होगा और उस मशीन पर उपलब्ध होगा जिस पर आप डिबगिंग कर रहे हैं। यदि आपने ऐसा नहीं किया है, तो कुछ भी काम नहीं करेगा।

जांच करने के लिए अगली बात यह है कि एलएलडीबी डीएसवाईएम उठा रहा है। यह पृष्ठ कैसे इस प्रक्रिया काम करता है के कुछ विवरण नहीं है:

http://lldb.llvm.org/symbols.html

लेकिन अगर बाकी सब विफल रहता है, तो आप हाथ से इसे जोड़ने के लिए add-dsym आदेश का उपयोग कर सकते हैं।

कि आपकी समस्या अभी भी तय नहीं किया है, तो अपने dylib में कुछ प्रतीक चुनते हैं तो और कार्य करें:

(lldb) image lookup -vn <SYMBOL_NAME> 

या एकांतर लोड dylib में कुछ पता खोजने के लिए और कार्य करें:

(lldb) image lookup -va <ADDRESS> 

यदि एलएलडीबी को डीएसवाईएम मिला और डीबग जानकारी सही है, आउटपुट की लाइनों में से एक "संकलन इकाई" के लिए प्रविष्टि होना चाहिए। डीबग जानकारी यही है कि स्रोत फ़ाइल का पथ है। उस पथ का उपयुक्त आधार वह है जिसे आप target.source-map में उपयोग करना चाहिए। यदि आप उस प्रविष्टि को नहीं देखते हैं, तो उस संकलन इकाई के लिए डीबग जानकारी किसी भी तरह से खो रही है।

यदि उन सभी चीजें अच्छी लगती हैं और lldb अभी भी स्रोत फ़ाइलों को नहीं देख पा रहा है, तो आप शायद एक बग मार रहे हैं, इस मामले में कृपया http://bugreporter.apple.com के साथ एक बग दर्ज करें।

+0

विस्तृत उत्तर के लिए धन्यवाद, जो काम करता है, मैं वास्तव में डीएसवाईएम खो रहा था। मैंने 'एड-डीएसआईएम' का इस्तेमाल किया और डीएसवाईएम पथ की ओर इशारा किया, फिर मैंने प्रतीक स्रोत कोड पथ प्राप्त करने के लिए 'छवि लुकअप-वीएन ' का उपयोग किया, और फिर 'सेटिंग्स सेट target.source-map/path/prefix का उपयोग करके मैपिंग बदल दी/मैं/मिला/से/लुकअप/पथ/उपसर्ग/चालू/मेरी/मशीन'। –

+0

इसे स्वचालित करने के लिए मैं http://lldb.llvm.org/symbols.html से निर्देशों का उपयोग करूंगा। –

+0

बीटीडब्ल्यू - डीबग के लिए डिलीब का निर्माण, एक डीएसवाईएम आवश्यक है, या बौने फ़ाइल के भीतर एम्बेडेड एक ही डेटा है? –