Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lldb:实现接受用户输入的自定义命令 < P>我使用Python通过自定义命令 GM 扩展LLDB,调用C++函数 CLI(const char * PARAMS)< /C> >。 因此可以暂停xcode(从而启动lldb)并键入 (lldb) gm set value_Python_C++_Xcode_Lldb - Fatal编程技术网

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