gpt4 book ai didi

python - lldb:实现接受用户输入的自定义命令

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:23 24 4
gpt4 key购买 nike

我正在使用 python 通过自定义命令 gm 扩展 lldb,然后调用 C++ 函数 cli(const char* params)。所以可以暂停 xcode(从而启动 lldb)并输入...

(lldb) gm set value

然后触发调用cli("set value")

C++ 函数 cli 可以利用 std::cout 打印一些状态,但我不能使这个函数“交互式”,即消耗用户输入:

void cli(const char* params) {   
std::cout << "params: " << params << std::endl; // works

std::string userInput;
std::cin >> userInput; // does not work; is simply ignored
}

问题:如何使 cli 在消耗(并进一步处理)用户输入的意义上具有交互性?


为了进一步展示我想要实现的目标:有内置的 lldb 命令,如 expr(不带参数)进入交互模式:

(lldb) expr
Enter expressions, then terminate with an empty line to evaluate:
1 2+2
2
(int) $0 = 4

我想在我自己的命令中有类似的行为,即输入 gm 然后交互地询问参数:

(lldb) gm
Enter generic model parameters; Terminate interactive mode with "end":
1 set value
2 params: set value
3 end

为了完整起见,请参阅当前用于调用 cli 函数的 python 脚本:

def gm(debugger, command, result, internal_dict):

cmd = "po cli(\""+command+"\")"
lldb.debugger.HandleCommand(cmd)

# And the initialization code to add your commands
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand('command script add -f gm.gm gm')
print 'The "gm" python command has been installed and is ready for use.'

以及 .lldbinit 文件中注册此脚本的行:

command script import ~/my_commands.py

最佳答案

内部 lldb 保留了一个“I/O 处理程序”堆栈,因此例如 expr 只是将“Expr I/O 处理程序”压入堆栈,收集输入直到完成,然后从堆栈中弹出并运行命令。

在 C++ SB API 中看起来像是 SB 类 (SBInputReader) 的第一个草图,但我不认为它是完整的,而且它目前没有暴露给 Python。所以我认为还没有足够的连接让你从 Python 中做到这一点。

关于python - lldb:实现接受用户输入的自定义命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50380468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com