チュートリアル: 最初の Kotlin アプリケーションをデバッグする
作成して実行した Kotlin アプリケーションが用意できました。 期待した通りに動作しないことに気付きます。 たとえば、誤った値を返す、または例外が発生してクラッシュする場合があります。 コードにエラーがあるようですので、デバッグのタイミングです。
デバッグとは
一般的に、デバッグとは、プログラム内のエラーを検出して修正するプロセスです。
対処しなければならないエラーには、さまざまな種類があります。 構文エラーなど、コンパイラーによって処理されるため、簡単に検出できるものもあります。 また、スタックトレースを確認することでエラーをすぐに特定できる場合もあり、原因を突き止めるのに役立ちます。
しかし、中には発見や修正に時間がかかる手強いエラーも存在します。 例えば、プログラムの初期段階で発生する微妙なロジックエラーは、後になってから表面化することがあり、原因を特定するのが大変です。
ここで デバッガーが役立ちます。 これは、プログラムの内部動作を観察することで、効率的にバグを発見できるツールです。 これは、指定されたポイントで実行を一時停止し、プログラムの状態を分析し、必要に応じて実行をステップごとに進めることで可能になります。 デバッグ中は、すべてを制御できます。 このチュートリアルでは、デバッグの基本的なシナリオについて説明します。
コードを調べる
簡単なデバッグのケースを試してみましょう。 次のアプリケーションがあるとします。
プログラムは、コマンドライン引数として渡されるすべての値の平均を計算することになっています。
コンパイルや実行に課題はありませんが、結果は期待したものではありません。 例えば、 1 2 3 を入力すると、結果は 6.0 となります。
まず、エラーがどこから発生しているかを考える必要があります。 問題は print ステートメントにはないと考えられます。 おそらく、予期しない結果は findAverage 関数から発生しています。 原因を見つけるために、実行時のその動作を調べてみましょう。
ブレークポイントの設定
バグを調査するには、誤った結果を生み出すコードに到達したときに、プログラムを一時停止する必要があります。 これは ブレークポイントを設定することで行います。 ブレークポイントは、状態を調べるためにプログラムが一時停止されるコード行を示します。
findAverage関数が呼び出される行のガターをクリックします。
デバッグモードでプログラムを実行する
それでは、デバッグモードでプログラムを起動してみましょう。
プログラムの実行やデバッグ時に引数を渡す必要があるため、 実行 / デバッグ構成にこれらを追加しましょう。
ガターの
実行 アイコンをクリックし、 実行構成の変更 を選択します。

プログラム引数 フィールドに
1 2 3と入力します。 変更を適用してダイアログを閉じます。
main関数の近くにある実行 ボタンをクリックします。 メニューから デバッグ を選択します。

デバッガーセッションが開始され、指定した引数でプログラムが実行されます。
プログラムの状態を分析する
デバッガーセッションが開始されると、ブレークポイントに到達するまでプログラムは正常に実行されます。 このとき、IntelliJ IDEA はプログラムを一時停止し、停止した行をハイライトして、 デバッグ ツールウィンドウを表示します。

ハイライトされた行はまだ実行されていません。 これで、プログラムはあなたからのさらなる指示を待ちます。 中断状態では、プログラムの状態を保持する変数を調べることができます。
findAverage 関数はまだ呼び出されていないため、 結果}]} as it appears in the context filed.}]} as it appears in the context filed.}]} as it appears in the context filed. などのすべてのローカル変数はまだスコープ内にありませんが、 引数 配列の内容を調べることができます (引数 は main 関数のスコープ内にあります)。 変数の内容は、 引数 が使用されている場所にインラインで表示されます。

デバッグ ツールウィンドウの スレッドと変数 タブで、現在スコープ内にあるすべての変数に関する情報を取得することもできます。

プログラムのステップスルー
デバッグ ツールウィンドウに慣れたら、 findAverage 関数にステップインして、その中で何が起こっているかを確認しましょう。
関数にステップインするには、 デバッグ ツールウィンドウのツールバー上の
ステップイン ボタンをクリックするか、 F7 を押してください。

実行ポイントを 1 ステップ進めたため、エディターでのハイライトが別の行に移動します。
ステップを続けて、ローカル変数
結果}]} as it appears in the context filed.}]} as it appears in the context filed.}]} as it appears in the context filed.がどのように宣言され、ループの各反復でどのように変更されるかを見てみましょう。 変数sが"3"の値になるまで、ステップイン をクリックし続けます。

現在、変数
sには値"3"が含まれています。 これは Int に変換され、現在3.0の値を持つ結果}]} as it appears in the context filed.}]} as it appears in the context filed.}]} as it appears in the context filed.に追加されます。 これまでのところエラーはありません。 合計は正しく計算されます。あと 2 ステップで
返却ステートメントに到達し、省略されていた箇所が判明します。 入力数で割らずに、6.0の値を持つ結果}]} as it appears in the context filed.}]} as it appears in the context filed.}]} as it appears in the context filed.を返しています。 これが、誤ったプログラム出力の原因でした。
エラーを修正しましょう。
return result行を、正しい計算式を含むコードに置き換えてください。return result / input.size
デバッガーセッションを停止し、プログラムを再実行する
プログラムが正常に動作することを確認するには、デバッガーセッションを停止してプログラムを再実行します。
デバッグ ツールウィンドウのツールバーで、
停止 をクリックするか、 Ctrl+F2 を押します。

main関数の近くにある実行 ボタンをクリックします。 メニューから 実行 を選択します。

ここでプログラムが正しく機能することを確認します。
