毎回ソースコードいじってRxSwiftのdebug
仕込むのってめんどいですよね。
そこで、スクリプトを使ってLLDBから仕込めるようにしました。
流れてくるイベントを簡単にチェックするのに役に立つかもしれません。
スクリプト
Pythonスクリプトを適当な場所においておきます。
#!/usr/bin/env python3 import lldb def debugo(debugger, name, result, dict): lldb.debugger.HandleCommand('e %s.debug("::%s").subscribe()' % (name, name)) def __lldb_init_module(debugger, internal_dict): debugger.HandleCommand('command script add -f debugo.debugo deo')
これを.lldbinit
や.lldbinit-Xcode
で読み込みます。
今回は~/dotfiles/lldb/debugo.py
というパスで置いたことにします。
command script import ~/dotfiles/lldb/debugo.py
使い方
上記のコマンドをdeo
という名前で登録したので、breakしたタイミングでdeo (変数名)
でdebug
できます。
例えば、addButton.rx.tap
をdebug
したい場合はこんな感じです。
(lldb) deo addButton.rx.tap.asObservable() 2019-09-28 00:27:08.215: ::addButton.rx.tap.asObservable() -> subscribed (lldb) c 2019-09-28 00:27:11.430: ::addButton.rx.tap.asObservable() -> Event next(()) 2019-09-28 00:27:12.439: ::addButton.rx.tap.asObservable() -> Event next(())
例のごとく、Edit Breakpointで編集すれば、勝手に実行してくれます。
解説
引数で指定した変数に対して、.debug().subscribe()
を仕込んでいます。
dispose
しないことによって、その場でsubscribe
が切れるのを防いでいます。
この方法では普通にdebug
するのと異なり、間に挟むということができません。
RxSwiftはメソッドチェーンで書いていくので、LLDBでは文の間で切ることができず、新たにsubscribe
する方式をとっています。
したがって、hotとcoldの具合によっては都合が悪いかもしれません。
おまけ
command regex
を使っても書けます。
command regex deo 's/(.+)/e %1.debug().subscribe()/'