LLDBのcommand regex
を使うと、zsh
のanonymous functionのalias
みたいな感じで、
引数に置換かけながらLLDBコマンドを実行するaliasが作れます。
これを利用することで、簡単なコマンドならば、Pythonスクリプトを用意する手間が省けます。
やりかた
構文はシンプルで、
command regex <cmd-name> [s/<regex>/<subst>/ ...]
で、置換パターンはsed
のようにs///
で書けば問題ないです。(複数可)
これを.lldbinit
に記載しておけば、毎回LLDBが立ち上がるたびに、コマンドがセットされます。
例
一例として、XcodeのunsafeBitCast(:to)
のaliasを紹介します。
command regex cast 's/(.+) (.+)/expr -l swift -- let $casted = unsafeBitCast(%1, to: %2.self)/'
一般にある置換のように、()
で囲んだ部分は%1
, %2
...で利用できます。
この場合、第1引数のインスタンスやアドレスを、第2引数のタイプにキャストして、$casted
に格納します。
上の一行を、~/.lldbinit
などに記載しておけば、cast
というコマンドが登録されます。
(lldb) cast view.subviews[0] UIButton (lldb) po $casted.frame ▿ (134.5, 305.0, 106.0, 57.0) ▿ origin : (134.5, 305.0) - x : 134.5 - y : 305.0 ▿ size : (106.0, 57.0) - width : 106.0 - height : 57.0
この書き方の場合、let
を利用していて書き換えが効かないため、何度もキャストしたい場合は別途工夫がいるかも知れません。