2016-05-12 47 views
2

我定義了一個名爲jspatch這樣的新LLDB命令:Can lldb可以執行一個帶有參數的命令包含一個非轉義的返回字符嗎?

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

此命令接受一個字符串作爲參數。

但我不能執行這樣的命令?

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

,我會在evaluateScript:'var a = 10

但我不能通過它包含未轉義的字符串返回字符,任何人都有這個解決方案?

回答

1

考慮到lldb命令解釋程序的設置方式,這將不起作用。當前未轉義的返回總是提交解析命令。

LLDB確實有嚴格的結構化命令 - 在我們得到回報時,我們大概可以檢測到我們正處於爭論的中間而沒有終止引用,並繼續收集論證。但它也支持「解析」命令,如expr和處理正則表達式別名命令的命令,其中命令的格式沒有要求。後者會使除了將返回作爲命令終止符以外的任何其他操作都很難。

+0

我可以使用其他技術來構建一個命令可以接受一個非轉義的返回嗎? – Karl

+0

問題是,在你的命令被識別出之前,你會被命令行解析器截斷......所以你可以在那裏干預。 lldb在內部處理更復雜的輸入的方式例如在'expr'命令中顯示,其中'expr'沒有參數進入專用於收集命令參數的多行模式。但是,一個命令進入多線模式的能力目前只能在lldb內部使用,沒有Python方法可以做到這一點。 –

1

正則表達式命令不是多行命令。所以,你做的方法:

(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運行表達式。

+0

感謝您的回覆,我會盡力的 – Karl

相關問題