首页 > 解决方案 > 如何在 LLDB Python 中执行“设置设置 target.env-vars”?

问题描述

我想在 Python 中创建一个 LLDB 别名/宏,其中包括设置一个要传递给未来进程的环境变量。怎么做?

如果只是 Python,我会更新os.environ. 但是,lldbscript不会将其从 Python 传播回target.env-vars,所以我没有得到想要的结果:

(lldb) settings show target.env-vars
target.env-vars (dictionary of strings) =
(lldb) settings set target.env-vars TEST1='this is test1'
(lldb) settings show target.env-vars
target.env-vars (dictionary of strings) =
  TEST1=this is test1
(lldb) script os.environ['TEST2']='this is test2'
(lldb) settings show target.env-vars
target.env-vars (dictionary of strings) =
  TEST1=this is test1
(lldb) 

我正在使用 lldb-1001.0.13.3 。

标签: pythonlldb

解决方案


目标环境变量有点复杂。它们实际上由三个设置控制。一种是:

target.inherit-env

如果该设置为 false,则在target.env-vars不覆盖环境设置的启动中仅使用环境变量。

如果为真,则首先将主机环境复制到环境数组中。然后target.unset-env-vars从其中删除。然后将target.env-vars它们放入其中。所以无论如何,target.env-vars只包含用户明确设置的变量。

请注意,所有这些都是通过制作 SBLaunchInfo 并使用它来启动目标来完成的。如果您从 Python 运行该过程,则可以创建自己的 SBLaunchInfo,这将覆盖所有这些计算。

同理,如果您想查看此合并的结果,请在相关目标上调用 SBTarget.GetLaunchInfo(),然后您可以使用SBLaunchInfo.GetNumEnvironmentEntriesand查看其环境SBLaunchInfo.GetEnvironmentEntryAtIndex

无论如何,这都是背景。如果您想使用 env-vars 设置从 Python 传播新选项,您需要像从命令行一样使用SBCommandInterpreter.HandleCommandAPI 来运行命令。settings setlldb 尚未实现脚本 API 来访问设置。


推荐阅读