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

Can lldb execute a command with argument contain a unescaped return char?

我定义了一个名为 jspatch 的新 lldb 命令,如下所示:

command regex jspatch 's/(.+)/p (id)[JPEngine evaluateScript:@"%1"]/'

此命令接受一个字符串作为参数。

但是我不能执行这样的命令?

jspatch 'var a = 10
var b = 20
a = a + b'

我刚刚在 evaluateScript: 中得到 'var a = 10

但我无法将包含未转义 return 字符的字符串传递给它,有人对此有解决方案吗?

考虑到 lldb 命令解释器的设置方式,这将行不通。未转义的 return 目前总是提交解析命令。

LLDB 确实有严格结构化的命令——当我们得到 return 时,我们大概可以检测到我们正处于参数 w/o 的中间,并继续收集参数.但它也支持 "unparsed" 命令,如 expr 和处理正则表达式别名命令的命令,其中对命令的格式没有要求。后者将使除了将 return 视为命令终止符之外的任何事情都变得非常困难。

正则表达式命令不是多行命令。所以你的做法:

(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 命令。请参阅名为 "CREATE A NEW LLDB COMMAND USING A PYTHON FUNCTION" 的部分中的 http://lldb.llvm.org/python-reference.html。这将允许您创建一个调用 python 模块和 运行 代码的新命令行命令。您可以使用内置 "raw_input" 命令根据需要获取任意数量的行,然后根据需要 运行 来自 python 的表达式。