谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

オンデマンドアタッチで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して、ログ出力や通信ができ、
なおかつ綺麗にデタッチのできる
筋の良いデバッグツール用フレームワークになるように思います。