python - 如何在 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 。
解决方案
目标环境变量有点复杂。它们实际上由三个设置控制。一种是:
target.inherit-env
如果该设置为 false,则在target.env-vars
不覆盖环境设置的启动中仅使用环境变量。
如果为真,则首先将主机环境复制到环境数组中。然后target.unset-env-vars
从其中删除。然后将target.env-vars
它们放入其中。所以无论如何,target.env-vars
只包含用户明确设置的变量。
请注意,所有这些都是通过制作 SBLaunchInfo 并使用它来启动目标来完成的。如果您从 Python 运行该过程,则可以创建自己的 SBLaunchInfo,这将覆盖所有这些计算。
同理,如果您想查看此合并的结果,请在相关目标上调用 SBTarget.GetLaunchInfo(),然后您可以使用SBLaunchInfo.GetNumEnvironmentEntries
and查看其环境SBLaunchInfo.GetEnvironmentEntryAtIndex
。
无论如何,这都是背景。如果您想使用 env-vars 设置从 Python 传播新选项,您需要像从命令行一样使用SBCommandInterpreter.HandleCommand
API 来运行命令。settings set
lldb 尚未实现脚本 API 来访问设置。
推荐阅读
- java - 当我向 OM2M 发送 CoAP 消息时发生 nullpointerException
- cefsharp - 将上下文参数传递给 ResourceHandler 的最佳方法是什么
- matlab - 优化定积分
- android - Android Advance Webview 库 - 加载时网页冻结
- javascript - 在 console.log 之后 react-redux 存储中的状态变量未定义?
- c# - 成功发送电子邮件时的C# Outlook删除事件?
- php - 我想随机排序
- mysql - 访问 cakephp3 控制器中的非关联表
- css - Chrome 默认 MinLength 错误
- html - HTML圆圈中有多行?