首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LLDB调试器不识别在远程计算机上编译的可执行符号

LLDB调试器不识别在远程计算机上编译的可执行符号
EN

Stack Overflow用户
提问于 2015-11-05 09:46:34
回答 1查看 3.3K关注 0票数 0

我正在Xcode/clang环境上的一台计算机上构建我的项目,我希望在另一个站点上在lldb调试器下运行它,而不复制源代码、只复制可执行文件和符号文件。

我复制了所有的dSYM目录,这样lldb调试器就可以识别我需要的符号并呈现出真正的函数(目前我在回溯命令中得到了像___lldb_unnamed_function532这样的函数名)

我试着使用命令

代码语言:javascript
运行
复制
settings set target.source_map /source_dir /target_dir

其中,target_dir表示放置所有dSYM目录的路径,source_dir表示所有dSYM目录的原始父目录的路径。

不幸的是,除非源代码驻留在/target_dir上,否则它无法工作。

我哪里出错了?

好的,所以我发现当我将dSYM dir复制到可执行文件的相同位置时,lldb会设法解密这些符号。有没有办法“告诉”11分局到另一个地点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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.htmlLLDB: add symbols file?

我在我的MAC OS X上试了一下:

代码语言:javascript
运行
复制
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中列出了源代码:

代码语言:javascript
运行
复制
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;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33541218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档