我正在Xcode/clang环境上的一台计算机上构建我的项目,我希望在另一个站点上在lldb调试器下运行它,而不复制源代码、只复制可执行文件和符号文件。
我复制了所有的dSYM目录,这样lldb调试器就可以识别我需要的符号并呈现出真正的函数(目前我在回溯命令中得到了像___lldb_unnamed_function532
这样的函数名)
我试着使用命令
settings set target.source_map /source_dir /target_dir
其中,target_dir
表示放置所有dSYM目录的路径,source_dir
表示所有dSYM目录的原始父目录的路径。
不幸的是,除非源代码驻留在/target_dir
上,否则它无法工作。
我哪里出错了?
好的,所以我发现当我将dSYM dir复制到可执行文件的相同位置时,lldb会设法解密这些符号。有没有办法“告诉”11分局到另一个地点?
发布于 2015-11-05 14:16:23
要为dSYM指定不同的路径,可以执行以下步骤:
首先,使用以下命令为可执行文件生成UUID:
xcrun侏儒转储--uuid路径到可执行
然后,通过将前20个十六进制数字分割成4个字符块并创建一个目录树来创建目录:每个后续目录都在前面的目录中创建。然后创建一个符号链接,其名称是最深目录中最后12个十六进制数字。例如,如果生成的UUID是:23516BE4-29BE-350C-91C9-F36E7999F0F1
然后制作文件夹:2351/6BE4/29BE/350C/91C9/
和符号链接:F36E7999F0F1
符号链接值是到达包含矮人的dSYM包中的mach-o文件的完整路径。如果dSYM位于source/foo.dSYM/Content/Resources/侏儒/foo中,则链接必须是到source/foo.dSYM/Content/Resources/侏儒/foo的完整路径(参见下面的示例)。
最后一部分是告诉DebugSymbols使用以下方法检查这个UUID文件映射缓存:
%默认写入com.apple.DebugSymbols DBGFileMappedPaths路径到您的uuids树。
例如,您可以将您创建的目录放在~/Library/SymbolCache/dsyms/uuids/ (或您想要的任何地方)下,以便您的最终链接的完整路径为:~/Library/SymbolCache/dsyms/uuids/2351/6BE4/29BE/350C/91C9/F36E7999F0F1
而命令:
~/Library/SymbolCache/dsyms/uuids/ %默认写入com.apple.DebugSymbols DBGFileMappedPaths
然后用以下方式检查:
默认值为com.apple.DebugSymbols DBGFileMappedPaths
资料来源:http://lldb.llvm.org/symbols.html,LLDB: add symbols file?
我在我的MAC OS X上试了一下:
xcrun dwarfdump --uuid ./a.out
UUID: 7C9D0D55-3882-3F1B-99CA-446AFF4B5D0E (x86_64) ./a.out
mkdir PAPERINO
mv a.out.dSYM/ PAPERINO/
mkdir -p ~/Library/SymbolCache/dsyms/uuids/
mkdir -p ~/Library/SymbolCache/dsyms/uuids/7C9D0/0D55/3882/3F1B/99CA
cd ~/Library/SymbolCache/dsyms/uuids/7C9D0/0D55/3882/3F1B/99CA/
ln -s ../../../<my path>/PAPERINO/a.out.dSYM/Contents/Resources/DWARF/a.out 446AFF4B5D0E
最后,我在lldb中列出了源代码:
lldb ./a.out
(lldb) target create "./a.out"
Current executable set to './a.out' (x86_64).
(lldb) source list
6 {
7 char input[40] = {'\0'};
8 int count = 0;
https://stackoverflow.com/questions/33541218
复制相似问题