MAC上如何实现dsym动态代码映射
2022-12-12 13:59:57
标签: dsym lldb dsymutil dwarfdump--uuid dbgsourcepathremappi
首先在原始工程中,用CMake,每创建一个target,把它记到一个文件。在编译完以后,用
conanchen@ConanChen client-delivery % dsymutil
/Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib
-o
/Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib.dSYM
可以直接从编译好的二进制文件里生成出.dSYM文件,当然前提得是二进制文件中记录了Symbol相关信息。
然后把dSYM拷贝到远端机器,但有个问题是dSYM里记录的路径是机器的绝对路径,所以必须做Source
Map,可以用lldb命令行做。而项目用了另外的方法。
首先,用nm -pa binary | grep "SO /"
conanchen@ConanChen client-delivery % nm -pa
/Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib
| grep "SO /"
0000000000000000 - 00 0000
SO
/Users/conanchen/client-delivery/Publish/AdSharedMemory/
000000006396a51a - 03 0001
OSO
/Users/conanchen/client-delivery/Publish/Output/MAC64/build/NaFusionDoc.build/Debug/Objects-normal/x86_64/AdSharedMemory.o
能得到源文件和.o文件的一排列表。接着,就是利用这些路径,和本地路径做个映射。把后面结尾的路径,一层层放到本地指定路径做映射看哪个存在。
然后验证一下UUID
conanchen@ConanChen client-delivery % dwarfdump
--uuid
/Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib
UUID: 9EC48D57-84AD-3B83-961E-66ABDD0ED485 (x86_64)
/Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib
conanchen@ConanChen client-delivery % dwarfdump
--uuid
/Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib.dSYM
UUID: 9EC48D57-84AD-3B83-961E-66ABDD0ED485 (x86_64)
/Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib.dSYM/Contents/Resources/DWARF/NaFusionDoc10.dylib
然后生成一个UUID.plist文件
/Users/conanchen/client-delivery/3P/FusionCoreSymbols/osx_debug_develop_2.1.11814_symbols/NaFusionTestUI10.dylib.dSYM/Contents/Resources/FAE76DD7-F2EA-31A5-80E3-0756EB232616.plist
MAC上如何实现dsym动态代码映射
首先在原始工程中,用CMake,每创建一个target,把它记到一个文件。在编译完以后,用
conanchen@ConanChen client-delivery % dsymutil /Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib -o /Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib.dSYM
可以直接从编译好的二进制文件里生成出.dSYM文件,当然前提得是二进制文件中记录了Symbol相关信息。
然后把dSYM拷贝到远端机器,但有个问题是dSYM里记录的路径是机器的绝对路径,所以必须做Source Map,可以用lldb命令行做。而项目用了另外的方法。
首先,用nm -pa binary | grep "SO /"
conanchen@ConanChen client-delivery % nm -pa /Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib | grep "SO /"
0000000000000000 - 00 0000 SO /Users/conanchen/client-delivery/Publish/AdSharedMemory/
000000006396a51a - 03 0001 OSO /Users/conanchen/client-delivery/Publish/Output/MAC64/build/NaFusionDoc.build/Debug/Objects-normal/x86_64/AdSharedMemory.o
能得到源文件和.o文件的一排列表。接着,就是利用这些路径,和本地路径做个映射。把后面结尾的路径,一层层放到本地指定路径做映射看哪个存在。
然后验证一下UUID
conanchen@ConanChen client-delivery % dwarfdump --uuid /Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib
UUID: 9EC48D57-84AD-3B83-961E-66ABDD0ED485 (x86_64) /Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib
conanchen@ConanChen client-delivery % dwarfdump --uuid /Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib.dSYM
UUID: 9EC48D57-84AD-3B83-961E-66ABDD0ED485 (x86_64) /Users/conanchen/client-delivery/Publish/Output/MAC64/Debug/Libraries/Applications/FusionDoc/NaFusionDoc10.dylib.dSYM/Contents/Resources/DWARF/NaFusionDoc10.dylib
然后生成一个UUID.plist文件
/Users/conanchen/client-delivery/3P/FusionCoreSymbols/osx_debug_develop_2.1.11814_symbols/NaFusionTestUI10.dylib.dSYM/Contents/Resources/FAE76DD7-F2EA-31A5-80E3-0756EB232616.plist