オンデマンドアタッチでBCIした後、どうやって元に戻すのさ
BTraceはオンデマンドアタッチでBCIを行い、ログを出力します。
そして、BTraceを停止すると、ログの出力は停止します。
さて、実際これはどうやっているのでしょうか。
ソースを読む前に、開発者ガイドを見ていたら、こんな記述がありました。
BTrace "To Do"s
Remove instrumentation when a client leaves tracing session. Right now, we "disable" trace calls when a BTrace client leaves the session. It would be better to remove the instrumentation and re-hotswap the classes to avoid the "disabled" calls completely.
BTrace Developer's Guide
なるほど、今のバージョンでは、
ログ出力を無効にしたクラスに書き換えているだけのようです。
つまり、元のクラスAを、ログ出力機能つきクラスA'に書き換えた後、
BTrace終了時には、ログ出力無効化済みクラスA''に書き換えているようです。
要は元のクラスAには戻らない、ということです。
ちょっと行儀が悪いツールですね。
だって、BTraceを終了させても、クラスは書き換えられたままなのですから。
BTraceを刺したことで問題が起こった場合、
BTraceを終了しても問題は発生したまま、となりかねません。
っていうか実際、そうなります。
逆に、このToDoさえクリアされれば、
オンデマンドアタッチでBCIして、ログ出力や通信ができ、
なおかつ綺麗にデタッチのできる
筋の良いデバッグツール用フレームワークになるように思います。