Что такое dSYM и как его использовать? (iOS SDK)
Иногда компилятор создает файлы.dSYM. Я предполагаю, что это файл, связанный с отладкой, но я не знаю, что это такое и как его использовать.
Что такое.dSYM? Как мне это использовать?
1 ответ
В файлах dSYM хранятся символы отладки для вашего приложения.
Такие сервисы, как crashlytics, используют его для замены символов в журналах аварийных остановок соответствующими именами методов, чтобы он был читабельным и имел смысл.
Преимущество использования dSYM состоит в том, что вам не нужно поставлять ваше приложение с его символами, что затрудняет его реинжиниринг, а также уменьшает ваш двоичный размер
чтобы использовать его для символизации журнала сбоев, необходимо перетащить журнал сбоев в журналы устройств устройства в органайзере компьютера, скомпилировавшего двоичный файл приложения (компьютера, на котором хранится dSYM).
если у вас есть dSYM, но у вас нет компьютера, скомпилированный двоичный файл приложения, следуйте инструкциям, приведенным в этой ссылке, чтобы установить dSYM на компьютер
Для получения дополнительной информации см. техническую записку Apple TN2151.
dSYM
расшифровывается как Xcode Debugging Symbols, это своего рода файл сопоставления, который может, например, декодировать трассировку стека в читаемый формат. Это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"