Xcode 相当于gdb的LLDB“;目录";用于指定源搜索路径的命令?

Xcode 相当于gdb的LLDB“;目录";用于指定源搜索路径的命令?,xcode,debugging,gdb,lldb,Xcode,Debugging,Gdb,Lldb,是否正在寻找与gdb“directory”命令等效的lldb,以添加搜索路径来查找丢失的源代码(或xcode中可能的类似功能) 提前谢谢 target.source映射设置允许您在调试会话中定义一系列a=>b路径重映射。它与gdb dir命令不同,gdb dir命令是按基本名称搜索源文件的目录列表,但是您可以使用源映射解决相同的问题。以下是编译后将源文件移动到隐藏目录的示例: % cd /tmp % echo 'int main () { }' > a.c % clang -g a.c %

是否正在寻找与gdb“directory”命令等效的lldb,以添加搜索路径来查找丢失的源代码(或xcode中可能的类似功能)


提前谢谢

target.source映射设置允许您在调试会话中定义一系列
a=>b
路径重映射。它与gdb dir命令不同,gdb dir命令是按基本名称搜索源文件的目录列表,但是您可以使用
源映射
解决相同的问题。以下是编译后将源文件移动到隐藏目录的示例:

% cd /tmp
% echo 'int main () { }' > a.c
% clang -g a.c
% mkdir hide
% mv a.c hide/
% xcrun lldb a.out
(lldb) settings set target.source-map /tmp /tmp/hide
(lldb) l -f a.c
   1    int main () { }
(lldb) br se -n main
Breakpoint created: 1: name = 'main', locations = 1
(lldb) r
Process 21674 launched: '/private/tmp/a.out' (x86_64)
Process 21674 stopped
* thread #1: tid = 0x1f03, 0x0000000100000f49 a.out`main + 9 at a.c:1, stop reason = breakpoint 1.1
    #0: 0x0000000100000f49 a.out`main + 9 at a.c:1
-> 1    int main () { }
(lldb) 

有关此设置的详细信息,请在lldb中键入
set list target.source map
。fwiw您可能在lldb中通过执行
apropos path
发现了这一点,该路径将列出名称/描述中包含单词path的所有命令/设置。看到有一个叫这个名字的场景,您可以使用
设置列表
查看设置列表,并发现它是在
目标下归档的。

无法找到源文件的问题可能是由有缺陷的编译过程引起的-我刚刚花了几个小时试图找到
lldb
命令来设置源文件的路径force,但最终发现我在
Makefile
中执行了实际编译,并使用相同的标志集(
-Wall-Werror-Wextra-g
)进行了链接。。。所以编译器在没有警告和错误消息的情况下工作,尽管错误(或被视为错误的警告)实际上存在。修复它们已修复
lldb
工作流。也许开发人员应该考虑添加一些警告(对于像我这样的新手),如果程序找不到源代码(它们位于同一个目录中的代码> SRC文件夹)。

杰森,谢谢你的使用说明,并提供一个很好的自我说明的例子。(“一张图片胜过千言万语”;-)希望您不介意使用此示例作为更新“GDB到LLDB命令映射”的建议()/是的,唯一的问题是target.source-map和dir不是一回事;它相当于gdb的路径名替换设置。Xcode在幕后使用了路径名替换,但用户通常不知道。我们需要在某个时候向lldb添加一个类似于gdb的dir命令的命令。如果我连接到一台远程机器,我通常不知道使用了什么路径,我希望能让lldb告诉我它想要找到源文件的路径,这样我就可以正确地对源文件进行映射。最简单的方法是:使用
图像查找--verbose--address$pc
(或
im loo-va$pc
获取有关当前执行位置的所有信息。您也可以为
image lookup
提供函数名或其他任何名称。您也可以使用python脚本接口通过类似
script print lldb.frame.GetCompileUnit()的行获取当前堆栈帧的文件名
。如果lldb找不到我需要的文件(例如,
l foo.cc:1
表示
错误:找不到源文件“foo.cc”。
)然后呢?gdb的
目录
让我们很容易说“看这里!”,但在lldb中似乎没有解决方案,除非您知道它试图在哪里找到文件,这样您就可以为
目标.source map
提供正确的参数,但它也没有告诉您这一点。