DSYM क्या है और इसका उपयोग कैसे करें? (आईओएस एसडीके)


117

कभी-कभी कंपाइलर .dSYM फ़ाइलों का उत्पादन करता है। मुझे लगता है कि यह एक डीबगिंग से संबंधित फ़ाइल है, लेकिन मुझे नहीं पता कि यह क्या है, और इसका उपयोग कैसे करें।

एक .dSYM क्या है? मैं इसे कैसे इस्तेमाल करूं?

जवाबों:


160

dSYM फ़ाइलें आपके ऐप के लिए डिबग प्रतीकों को संग्रहीत करती हैं

क्रैशलीटिक्स जैसी सेवाएं दुर्घटना लॉग में प्रतीकों को बदलने के लिए उपयुक्त तरीकों के नामों के साथ इसका उपयोग करती हैं, इसलिए यह पठनीय होगा और समझ में आएगा।

DSYM का उपयोग करने का लाभ यह है कि आपको अपने ऐप को शिप करने की आवश्यकता नहीं है क्योंकि इसके प्रतीकों को उल्टा करना कठिन हो जाता है ताकि इसे इंजीनियर उल्टा कर सके और अपने बाइनरी साइज़ को भी कम कर सके

क्रैश लॉग का प्रतीक करने के लिए उपयोग करने के लिए आपको ऐप के बाइनरी संकलित मशीन के आयोजक में डिवाइस के डिवाइस लॉग में क्रैश लॉग को खींचने की जरूरत है (एक मशीन जो dSYM को संग्रहीत करती है)

यदि आपके पास dSYM है, लेकिन मशीन में एप बाइनरी संकलित नहीं है, तो मशीन में dSYM इंस्टॉल करने के लिए इस लिंक में दिए गए निर्देशों का पालन करें।

अधिक जानकारी के लिए कृपया सेब तकनीकी नोट TN2151 देखें


1
एक ऐप स्टोर के साथ dSYMs को शामिल नहीं करेगा बाइनरी करें क्रैश क्रैश को क्रैश लॉग करने में सक्षम नहीं है?
जीनक

इसलिए 'ऐप प्रतीक शामिल करें ...' बॉक्स को अनचेक करना सुरक्षित है?
जीनक

2
यदि आप ऐप्पल कनेक्ट के अंदर क्रैशब्लॉग देखना चाहते हैं तो ऐप स्टोर पर ऐप अपलोड करते समय आप ऐप के प्रतीकों को शामिल कर सकते हैं। अगर आप क्रैशवेटिक्स का उपयोग कर रहे हैं, तो आपको ऐसा करने की ज़रूरत नहीं है, लेकिन ऐप में अपलोड में "प्रतीक ऐप शामिल करें ..." की जाँच करके ऐप प्रतीकों (डीएसएमआई फ़ाइल) को शामिल करने और ऐप्पल को भेजने के लिए इसे चोट नहीं पहुंचती है। स्टोर विज़ार्ड
तोमर यहां तक ​​कि

1
मैं उपयोगकर्ता को MBs के एक जोड़े को बचाने के बारे में सोच रहा था अगर यह किया जा सकता है
genaks


1

dSYMXcode डिबगिंग सिंबल के लिए खड़ा है, यह एक प्रकार की मैपिंग फ़ाइल है, जो उदाहरण के लिए, स्टैक-ट्रेस को पठनीय प्रारूप में डिकोड कर सकती है। यह Bundleअगली संरचना के साथ है:

उदाहरण के लिए क्रैश लॉग दिखता है:

//before
0   libswiftCore.dylib              0x000000018f3c9380 0x18f394000 + 217984
1   libswiftCore.dylib              0x000000018f3c9380 0x18f394000 + 217984
2   libswiftCore.dylib              0x000000018f3c8844 0x18f394000 + 215108
3   libswiftCore.dylib              0x000000018f3a74e0 0x18f394000 + 79072
4   libswiftCore.dylib              0x000000018f3ab0d8 0x18f394000 + 94424
5   F49088168M                      0x00000001045ac750 0x104590000 + 116560
6   F49088168M                      0x00000001045b7904 0x104590000 + 162052
7   F49088168M                      0x00000001045b897c 0x104590000 + 166268
8   F49088168M                      0x000000010459d914 0x104590000 + 55572
9   F49088168M                      0x00000001045a0e70 0x104590000 + 69232
10  F49088168M                      0x00000001045a0f4c 0x104590000 + 69452

dSYM कार्रवाई में

//after Symbolicating(dSYM is used)
0   libswiftCore.dylib              0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
1   libswiftCore.dylib              0x000000018f3c9380 closure #1 in closure #1 in closure #1 in _assertionFailure+ 217984 (_:_:file:line:flags:) + 452
2   libswiftCore.dylib              0x000000018f3c8844 _assertionFailure+ 215108 (_:_:file:line:flags:) + 468
3   libswiftCore.dylib              0x000000018f3a74e0 _ArrayBuffer._checkInoutAndNativeTypeCheckedBounds+ 79072 (_:wasNativeTypeChecked:) + 208
4   libswiftCore.dylib              0x000000018f3ab0d8 Array.subscript.getter + 84
5   F49088168M                      0x00000001045ac750 static ELM327ResponseManager.getResponse(responseStr:obd2Protocol:) + 116560 (ELM327ResponseManager.swift:27)
6   F49088168M                      0x00000001045b7904 ELM327Client.dataInput(_:characteristicUuidStr:) + 162052 (ELM327Client.swift:56)
7   F49088168M                      0x00000001045b897c protocol witness for BLEClientInputPort.dataInput(_:characteristicUuidStr:) in conformance ELM327Client + 166268 (<compiler-generated>:0)
8   F49088168M                      0x000000010459d914 BLEConnection.peripheralDataReceived(data:characteristicUuidStr:) + 55572 (BLEConnection.swift:124)
9   F49088168M                      0x00000001045a0e70 BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69232 (BLEConnection.swift:293)
10  F49088168M                      0x00000001045a0f4c @objc BLEConnection.peripheral(_:didUpdateValueFor:error:) + 69452 (<compiler-generated>:0)

डिफ़ॉल्ट रूप dSYMसे रिलीज़ संस्करण के लिए डिफ़ॉल्ट रूप से उत्पन्न होता है । तुम उसे देख सकते हो:

Build Settings -> Generate Debug Symbols -> Yes
Build Settings -> Debug Information Format -> DWARF with dSYM File

परिणाम स्थान आप पा सकते हैं Products फ़ोल्डर

dSYMफ़ाइल को मैन्युअल रूप से .appउपयोग करने से उत्पन्न करने के लिएdsymutil

dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM

का उपयोग कर दुर्घटना का प्रतीक है symbolicatecrash

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" 
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/Current/Resources/symbolicatecrash "<path>/F49088168M-2020-06-04-212904.crash" "<path>/F49088168M.app.dSYM" > symbolicated.crash

dSYMमैन्युअल रूप से उपयोग करने के लिए खोलने के लिएdwarfdump

dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM

परिणाम ऐसा दिखता है:

0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"

[शब्दावली]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.