dSYMとは何ですか?(iOS SDK)


117

コンパイラが.dSYMファイルを生成する場合があります。これはデバッグ関連のファイルだと思いますが、それが何で、どのように使用するのかはわかりません。

.dSYMとは?どうやって使うの?

回答:


160

dSYMファイルはアプリのデバッグシンボルを保存します

crashlyticsなどのサービスは、これを使用して、クラッシュログ内のシンボルを適切なメソッド名に置き換えます。これにより、読みやすく、意味がわかります。

dSYMを使用する利点は、アプリケーションにシンボルを添付する必要がないため、リバースエンジニアリングが困難になり、バイナリサイズを小さくできることです。

を使用してクラッシュログをシンボル表示するには、アプリのバイナリをコンパイルしたマシン(dSYMを格納するマシン)のオーガナイザーでデバイスのデバイスログにクラッシュログをドラッグする必要があります。

dSYMはあるがマシンはない場合、コンパイルされたアプリバイナリは、このリンクの指示に従ってdSYMをマシンにインストールします。

詳細については、アップルテクニカルノートTN2151を参照してください。


1
アプリストアバイナリにdSYMを含めないと、Crashlyticsはクラッシュをログに記録できなくなりますか?
genaks '06 / 06/06

「アプリのシンボルを含める...」ボックスをオフにしても安全ですか?
genaks 2016年

2
Apple Connect内でクラッシュログを表示したい場合は、アプリをアプリストアにアップロードするときにアプリシンボルを含めることができます。crashlyticsを使用している場合、その必要はありませんが、アプリシンボル(dsymファイル)を含め、アプリへのアップロードで[アプリシンボルを含める...]をオンにすることでアップルに送信しても問題はありません。ストアウィザード
Tomer Even

1
可能であれば、ユーザーに数MBを節約することを考えていました
genaks

- Crashlytics開発者からtwittercommunity.com/t/...
genaks

1

dSYMXcode 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手動でファイルを生成するには.appdsymutil

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"

[単語]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.