Что такое 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"

[Словарь]

Другие вопросы по тегам