正則表達式命令不是多行命令。所以,你做的方法:
(lldb) command regex jspatch 's/(.+)/p (id)[JPEngine evaluateScript:@"%1"]/'
不會與工作:
(lldb) jspatch 'var a = 10
(lldb) var b = 20
(lldb) a = a + b'
您可以爲運行此:因爲這將讓爲3個獨立的命令執行
jspatch 'var a = 10
var b = 20
a = a + b'
(lldb)jspatch'var a = 10; var b = 20; a = a + b;'
,或者您可能能夠把換行符作爲轉義序列:
(LLDB)jspatch '變種A = 10 \ NVAR B = 20 \ NA = A + B'
這取決於如何輸入在[JPEngine evaluateScript:]中解析。
你可能做的最好的事情就是把它寫成一個python命令。請參見http://lldb.llvm.org/python-reference.html中名爲「使用PYTHON函數創建新的LLDB命令」的部分。這將允許你創建一個新的命令行命令,調用一個python模塊並運行代碼。您可以使用內建的「raw_input」命令來根據需要獲取儘可能多的行,然後根據需要從python運行表達式。
我可以使用其他技術來構建一個命令可以接受一個非轉義的返回嗎? – Karl
問題是,在你的命令被識別出之前,你會被命令行解析器截斷......所以你可以在那裏干預。 lldb在內部處理更復雜的輸入的方式例如在'expr'命令中顯示,其中'expr'沒有參數進入專用於收集命令參數的多行模式。但是,一個命令進入多線模式的能力目前只能在lldb內部使用,沒有Python方法可以做到這一點。 –