IntelliJ IDEA 13.1 EAPのChronon Debuggerをお試しください!

IntelliJ IDEAの次期バージョン、13.1ではChronon Debugger プラグインでサポートしいます。既にEAPよりお試し頂けます。ご存じでない方のために説明しますと、Chronon はJavaプログラムの動作状況を記録して、後から解析することができる革新的ツールです。複雑なバグを追跡するのにとても有効です。

Chrononは商用ツールで、通常はライセンスを購入する必要がありいますが、なんとIntelliJ IDEA 13.1 Ultimateをお使いの方は完全に無料でご利用いただけます。

プラグインのインストール

Chrononを有効にするにはまずSettings → Plugins → Install JetBrains pluginよりChrononを選択肢、インストールしてください。

chronon_install_1

Chronon Include/Excludeパターン

Chrononはcode instrumentationを使っており、どのクラスを記録するのか指定する必要があります。run configurationを開いてChrononタブよりInclude / Excludeパターンを指定します。沢山のクラスを指定しすぎるとパフォーマンスに影響があるため注意してください。

chronon_run_configuration

スレッド二つで配列のソート、またバブルソートをする簡単なプログラムでChrononの使いかたを見てみましょう。Chrononは単なるデバッガではなく、ビデオテープのように動作状況を巻き戻しできることに注目してください。

Run with Chronon

まず、Run → Run ‘ChrononDemo’よりアプリケーションを実行します。

chronon_1

アプリケーションの実行が終了したら、IntelliJ IDEAは記録を展開して、Chrononツールウィンドウで開きます(デバッガのように見えます)。もちろん、以前の記録を開くことも出来ます。その場合はメインメニューのRun → Open Chronon Recordingを選択してください。

 chronon_3

Debugアクション

続いてRunメニューより記録データを進めたり巻き戻したりできます。

chronon_menu_2

変数ヒストリ

停止している場所に応じて、Localsタブはローカル変数の値を表示してくれます。特定のローカル変数を選択すると、Historyタブでは記録している間に設定された値の履歴を表示します。変数の値はプリミティブ型か、”Include Pattern”で指定したクラスのみが表示されますので注意してください。

chronon_4

Historyタブ内でダブルクリックすると、その変更が行われた箇所にジャンプすることができます。

chronon_5

変更履歴はローカルの配列はコレクションについても記録されます。

chronon_6

スレッドの切り替え

Threadsタブではスレッドを切り替えられます。

chronon_threads_1

メソッドヒストリ

Chrononツールで素晴らしいのはMethod Historyタブです。このタブで、書くメソッドの引数と戻り値の履歴を確認できます。どのようにしてメソッドが呼ばれたのか容易に確認できます。

chronon_method_history

ロギング

Loggingタブではプログラム実行時に特定のログを書き出すよう指定できます。

chronon_logging_1

例外

Chrononは失敗したテストをデバッグするのに特に有効です。Exceptionsタブでは記録した例外を全て洗い出してくれ、ダブルクリックすることでその次点の状態へプレイバックすることができます。

chronon_error_1

ところで、JetBrainsではTeamCityビルドサーバで発生する再現の難しい現象をまさに上記の方法で調査しています。TeamCityではいつでもChrononを使ってテストを実行し、問題を解析してバグコードを洗い出すことができます。

Chrononを皆様の開発に役に立てば幸いです。また、いつも通りフィードバックを掲示板YouTrackへいただければ幸いです。

Develop with Pleasure!

原文

This entry was posted in IntelliJ IDEA. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *