Що таке dSYM і як ним користуватися? (SDK для iOS)


117

Іноді компілятор виробляє .dSYM файли. Я думаю, що це файл, пов’язаний з налагодженням, але я не знаю, що це таке, і як ним користуватися.

Що таке .dSYM? Як я ним користуюся?

Відповіді:


160

Файли dSYM зберігають символи налагодження для вашої програми

Такі сервіси, як крашлітики, використовують його для заміни символів у журналах збоїв відповідними іменами методів, тому вони будуть читабельні та матимуть сенс.

Перевага використання dSYM полягає в тому, що вам не потрібно надсилати додаток із символами, що ускладнює зворотний інженер, а також зменшує бінарний розмір

Щоб використати для символізації журналу збоїв, потрібно перетягнути журнал збоїв у журнали пристроїв пристрою в організаторі машини, яка компілювала двійковий додаток (машина, що зберігає dSYM)

Якщо у вас є dSYM, але у вас немає пристрою для компіляції бінарного додатка, дотримуйтесь інструкцій у цьому посиланні, щоб встановити dSYM в машину

Для отримання додаткової інформації дивіться технічну записку щодо яблука TN2151


1
Чи не включати dSYM з двійковим магазином додатків, що Crashlytics не зможе реєструвати збої?
генаки

Тож можна зняти прапорець "Включити символи програми ..."?
генаки

2
якщо ви хочете мати можливість бачити збої в програмі Apple apple, ви можете включити символи програми під час завантаження програми в магазин додатків. якщо ви використовуєте крашмітики, вам не доведеться цього робити, але це не завадить включити символи програми (файл dsym) і надіслати його в яблуко, встановивши позначку "включити символи програми ..." у завантаження в додаток Майстер магазину
Tomer Even

1
Я думав врятувати користувачеві пару МБ, якщо це вдасться зробити
genaks

Від розробників Crashlytics - twittercommunity.com/t/…
genaks

1

dSYMозначає символи налагодження Xcode, це своєрідний файл відображення, який може, наприклад, декодувати стек стеження у читабельному форматі. Це 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.