lldb可以执行带有包含非转义返回字符的参数的命令吗?

时间:2016-05-12 10:54:25

标签: lldb

我定义了一个名为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:

但我不能传递一个字符串包含未转义的返回字符,任何人都有这个解决方案吗?

2 个答案:

答案 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运行表达式。