我定义了一个名为jspatch
的新lldb命令,如下所示:
command regex jspatch 's/(.+)/p (id)[JPEngine evaluateScript:@"%1"]/'
此命令接受字符串作为参数。
但我不能执行这样的命令?
jspatch 'var a = 10
var b = 20
a = a + b'
我只是'var a = 10
中的evaluateScript:
。
但我不能传递一个字符串包含未转义的返回字符,任何人都有这个解决方案吗?
答案 0 :(得分:1)
考虑到lldb命令解释器的设置方式,这将无法工作。非转义返回当前始终提交用于解析的命令。
LLDB确实有严格的结构化命令 - 当我们得到回报时,我们可能会发现我们正处于参数的中间而没有终止引用,并继续收集参数。但它也支持像expr
这样的“未解析”命令和处理正则表达式别名命令的命令,其中不需要命令格式。除了将返回视为命令终止符之外,后者将很难做任何事情。
答案 1 :(得分:1)
正则表达式命令不是多行命令。所以你的做法是:
(lldb) command regex jspatch 's/(.+)/p (id)[JPEngine evaluateScript:@"%1"]/'
不适用于:
jspatch 'var a = 10
var b = 20
a = a + b'
因为这将作为3个单独的命令执行:
(lldb) jspatch 'var a = 10
(lldb) var b = 20
(lldb) a = a + b'
您可以将其命名为:
(lldb)jspatch'var a = 10; var b = 20; a = a + b;'
或者您可以将新行放入转义序列中:
(lldb)jspatch'var a = 10 \ nvar b = 20 \ na = a + b'
这取决于如何在[JPEngine evaluateScript:]中解析输入。
你可能做的最好的事情就是把它写成python命令。请参阅“使用PYTHON功能创建新的LLDB命令”一节中的http://lldb.llvm.org/python-reference.html。这将允许您创建一个新的命令行命令,该命令调用python模块并运行代码。您可以使用内置的“raw_input”命令获取所需数量的行,然后根据需要从python运行表达式。