lldb:实现接受用户输入的自定义命令 < P>我使用Python通过自定义命令 GM 扩展LLDB,调用C++函数 CLI(const char * PARAMS)< /C> >。 因此可以暂停xcode(从而启动lldb)并键入 (lldb) gm set value
触发调用lldb:实现接受用户输入的自定义命令 < P>我使用Python通过自定义命令 GM 扩展LLDB,调用C++函数 CLI(const char * PARAMS)< /C> >。 因此可以暂停xcode(从而启动lldb)并键入 (lldb) gm set value,python,c++,xcode,lldb,Python,C++,Xcode,Lldb,触发调用cli(“设置值”) C++函数cli可以使用std::cout打印某些状态,但我无法使此函数“交互”,即使用用户输入: void cli(const char* params) { std::cout << "params: " << params << std::endl; // works std::string userInput; std::cin >> userInput; // does no
cli(“设置值”)
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
}
我希望在自己的命令中有类似的行为,即键入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处理程序”推到堆栈上,收集输入直到完成,然后将自身从堆栈中弹出并运行命令
<> P.>在C++ SB API中,有一个SB类(SbInPuffRead)的第一个草图,但我认为它不是完整的,它目前不暴露于Python。因此,我认为Python还没有为您提供足够的支持。oth,实现这一点应该不会太难,因为您必须填充到SB API的内部类已经非常完善。如果有人渴望有机会做一点lldb黑客…我刚刚开始调查lldb的扩展可能性,所以我对它知之甚少。无论如何,这意味着我必须签出并扩展lldb源代码,自己构建并将其部署到每个开发人员的开发环境中,对吗?您想要呈现的功能必须构建到lldb中,因为它目前在Python层中缺失。lldb开发社区非常有用,欢迎使用补丁。在补丁审查期间,总会有几轮有用的建议,但是声音补丁很快就进入了树中。然后,您必须等待下一个发布周期,才能将修复程序转换为正式的二进制文件。这大约是一年中的几次。在正式版本发布之前,您必须使用自己的版本来支持这一点,但这应该是暂时的。
command script import ~/my_commands.py