Eon*_*nil 107 debugging sdk compilation ios
有时编译器会生成.dSYM文件.我想这是一个调试相关的文件,但我不知道它是什么,以及如何使用它.
什么是.dSYM?我该如何使用它?
Tom*_*ven 140
dSYM文件存储应用程序的调试符号
像crashlytics这样的服务使用它来用相应的方法名称替换崩溃日志中的符号,这样它就是可读的并且有意义.
使用dSYM的好处是你不需要发送你的应用程序符号,这使得它更难以进行逆向工程并减少二进制大小
为了使用它来表示崩溃日志,您需要将崩溃日志拖动到编译应用程序二进制文件的机器的组织者(设备存储dSYM的机器)中的设备日志中
如果您有dSYM但没有机器,编译的应用程序二进制文件请按照此链接中的说明将dSYM安装到机器中
有关更多信息,请参阅苹果技术说明TN2151
yoA*_*ex5 15
Xcode 调试符号(dSYM)
dSYM它是一个Bundle(例如F49088168M.app.dSYM),其中包含一个映射信息,并且您可以使用它,例如,将堆栈跟踪解码为可读格式。
结构体:
例如,崩溃日志如下所示:
//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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
默认情况下dSYM,默认为发布版本生成。你可以检查一下:
Build Settings -> Generate Debug Symbols(GCC_GENERATE_DEBUGGING_SYMBOLS) -> Yes
Build Settings -> Debug Information Format(DEBUG_INFORMATION_FORMAT) -> DWARF with dSYM File
Run Code Online (Sandbox Code Playgroud)
您可以在Products文件夹中找到的结果位置
dSYM从.app使用手动生成文件dsymutil
dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM
Run Code Online (Sandbox Code Playgroud)
使用符号表示崩溃 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
Run Code Online (Sandbox Code Playgroud)
dSYM使用手动打开dwarfdump
dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM
Run Code Online (Sandbox Code Playgroud)
结果看起来像:
0x00000065 "PeripheralLogView"
0x000005cc "BLEConnection"
0x000005da "BLEPeripheral"
0x000005e9 "ELM327Client"
Run Code Online (Sandbox Code Playgroud)
*您的 .app 的 dSYM 应包括所有包含的(框架)dSYM
| 归档时间: |
|
| 查看次数: |
78829 次 |
| 最近记录: |