在 .lldbinit 中,可以使用“~”来扩展某些命令的主路径,例如
command script import
例如,
command script import ~/MyScripts/foo.py
完全可以接受。
但这对
settings set target.source-map
不起作用。
我们有一个构建用户,从自己的主目录打包和归档我们的程序,有时需要在本地读取符号并调试打包的程序。
这本身并不是一个问题。当我们调试时,为了获得源代码解析,我们必须将源代码从构建服务的主目录重新映射到我们自己的主目录。
settings set target.source-map /Users/builduser/src /Users/myname/src
我们希望能够在 .lldbinit 中有一行允许从构建用户主目录映射到当前用户主目录,而无需为每个用户进行编辑。
例如:
settings set target.source-map /Users/builduser/src ~/src
这看起来应该很简单,看看路径扩展在像
command script import
这样的命令中是如何工作的,但我们却得到了以下错误:
error: the replacement path doesn't exist: "~/src"
有什么办法可以做到这一点吗?
可能有一种涉及 python 导入的复杂方式,但如果可能的话,我们希望将其保留在一个文件中。 (尽管两个文件的 python 解决方案总比没有好)
lldb 命令语言没有此类功能。它故意保持简单,所有类似编程的任务都委托给 Python。
正如您所怀疑的,编写一个基于 lldb python 的命令来生成和设置正确的
settings set
命令并在 ~/.lldbinit 中运行会很简单。编写命令的文档在这里:
https://lldb.llvm.org/use/python-reference.html#create-a-new-lldb-command-using-a-python-function
API 参考是:
https://lldb.llvm.org/python_api.html
目前还没有好的 API 来进行设置,因此您必须使用 SBDebugger.HandleCommand() 来设置它。
请注意,
command script import
(这是将 python 模块导入 lldb 的 lldb 方式)采用 --relative-to-command-file
参数,因此您可以将带有命令的 .py 文件放在相对于 .lldbinit 的已知位置(我将我的~/.lldb
中的脚本文件),相对参数意味着您不必将用户特定的路径放入 .lldbinit 中。