有时编译器会产生.dSYM文件。我猜这是一个调试相关的文件,但我不知道它是什么,以及如何使用它。什么是.dSYM?如何使用它?
inb24sb21#
dSYM文件存储应用程序的调试符号像Crashlytics这样的服务使用它来用适当的方法名称替换崩溃日志中的符号,这样它就可读并且有意义。使用dSYM的好处是,您不需要将应用程序与其符号一起发布,从而使其更难进行逆向工程,并且还可以减少二进制大小为了使用符号化崩溃日志,您需要将崩溃日志拖到编译应用程序二进制文件的机器(存储dSYM的机器)的管理器中的设备日志中如果您有dSYM但没有编译应用程序二进制文件的机器,请按照this链接中的说明将dSYM安装到机器中。有一个mac app可以帮助你符号化崩溃日志,以防你需要自己做。有关详细信息,请参见apple technical note TN2151
nhhxz33t2#
Xcode调试符号(dSYM)
dSYM它是一个Bundle(例如F49088168M.app.dSYM),它包含一个Map信息,例如,你可以用它将一个堆栈跟踪解码成可读的格式。
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
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是release版本默认生成的,可以检查:
Build Settings -> Generate Debug Symbols(GCC_GENERATE_DEBUGGING_SYMBOLS) -> Yes Build Settings -> Debug Information Format(DEBUG_INFORMATION_FORMAT) -> DWARF with dSYM File
您可以在Products文件夹中找到的结果位置使用dsymutil从.app手动生成dSYM文件
Products
dsymutil
.app
dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM
使用symbolicatecrash符号化崩溃
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
使用dwarfdump手动打开dSYM
dwarfdump
dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM
结果如下:
0x00000065 "PeripheralLogView" 0x000005cc "BLEConnection" 0x000005da "BLEPeripheral" 0x000005e9 "ELM327Client"
dSYM location(https://stackoverflow.com/a/63953349/4770877).bcsymbolmap(https://stackoverflow.com/a/67274795/4770877)Vocabulary(https://stackoverflow.com/a/59216151/4770877)
2条答案
按热度按时间inb24sb21#
dSYM文件存储应用程序的调试符号
像Crashlytics这样的服务使用它来用适当的方法名称替换崩溃日志中的符号,这样它就可读并且有意义。
使用dSYM的好处是,您不需要将应用程序与其符号一起发布,从而使其更难进行逆向工程,并且还可以减少二进制大小
为了使用符号化崩溃日志,您需要将崩溃日志拖到编译应用程序二进制文件的机器(存储dSYM的机器)的管理器中的设备日志中
如果您有dSYM但没有编译应用程序二进制文件的机器,请按照this链接中的说明将dSYM安装到机器中。
有一个mac app可以帮助你符号化崩溃日志,以防你需要自己做。
有关详细信息,请参见apple technical note TN2151
nhhxz33t2#
Xcode调试符号(dSYM)
dSYM
它是一个Bundle
(例如F49088168M.app.dSYM
),它包含一个Map信息,例如,你可以用它将一个堆栈跟踪解码成可读的格式。结构:
例如,崩溃日志如下所示:
dSYM
在行动默认
dSYM
是release版本默认生成的,可以检查:您可以在
Products
文件夹中找到的结果位置使用
dsymutil
从.app
手动生成dSYM
文件使用
symbolicatecrash
符号化崩溃使用
dwarfdump
手动打开dSYM
结果如下:
dSYM location(https://stackoverflow.com/a/63953349/4770877)
.bcsymbolmap(https://stackoverflow.com/a/67274795/4770877)
Vocabulary(https://stackoverflow.com/a/59216151/4770877)