デバッガの条件ブレークポイントで変数値を書き換えるとデバッグが捗る話

自分がよく使う言語が Java と JavaScript というだけで、とりあえず Java と JavaScript にタグ付けしていますが、たぶんそれ以外の言語でも大抵有効なんじゃ無いかという Tips です。

Java ではデバッグに Eclipse と IntelliJ など使っています。JavaScript はほとんど Chrome の Developer Tools です。こういったブレークポイントを設定出来るデバッガでは、ブレークする条件に式を書ける機能を持っている事が多いです。少なくとも例に挙げた 3 つでは可能です。こういう条件付きブレークポイントで、最初に思いつく使い方は例えば以下のような物ですね。

for (int i=0; i<len; i++) {
  // 条件付きブレークポイント [i % 3 == 0]
}

変数 i が 3 の倍数の時だけ挙動が変、みたいなバグをデバッグするときに有効です。そして本来の使い方なのだと思います。

さあ、ここからが本題です。

テスト時とかデバッグ時とかに、一時的にこのフラグを変更したい、この変数値を書き換えたい、等々ありますよね。こういう時もデバッガは有効で、いったんブレークした後にメモリ上の変数を書き換えてそのまま実行するなどして、挙動を確かめることができます。

ただ、同じ条件で何度かテストしたいのに、毎回これをやるのは面倒です。ソースをちょっと書き換えちゃいます?まあ良いですが万一消し忘れたら大変ですし、そもそも外部ライブラリの部分だったりしたらもっと面倒ですよね?

そこで条件付きブレークポイントです。

boolean flag = checkSomething();
if (flag) {  // 条件付きブレークポイント [(flag = true) == false]
  // 何かテストしたい処理
}

なんとこれだけで、ブレークポイントを通過するときに、flag が常に true になります。そこでブレークすること無しに、です。しかもブレークポイントの有効・無効を切り替えることで、挙動の切り替えも可能です。
たったこれだけの事ですが、使い慣れるとウルトラ便利で、デバッグの度に大活躍してます。このハックが誰かの役に立つことを祈っています。

コメントを残す

メールアドレスが公開されることはありません。