【Java】スタックトレースの読み方とデバッグの方法について

Java

はじめに

Javaで開発をしていると、エラーや障害発生時に必ず目にするのがスタックトレース(stack trace) です。
コンソールやログにずらっと出てくる英文の見方がわからないとどこでエラーが発生したのかわからず原因の特定に時間がかかってしまいます。
今回は、「スタックトレースの読み方」についてログとして記載していきたいと思います。

他にも、体系的にJavaを学びたい方には以下の教材がおすすめです:

👉スッキリわかるJava入門 
👉スッキリわかるJava入門 実践編

 

スタックトレースとは

スタックトレースとは、例外が発生した時点までに 「どのメソッドをどの順番で通ってきたか」 を示す履歴情報のこと です。
Javaは例外が発生すると、以下の内容がまとめて出力されます。

  • 例外クラス名
  • メッセージ
  • 呼び出し元メソッドと行番号の一覧

 

基本構造

メッセージ例

Exception in thread "main" java.lang.RuntimeException: test.xml (指定されたファイルが見つかりません。)
        at com.example.App.StAX(App.java:161)
        at com.example.App.main(App.java:99)
Caused by: java.io.FileNotFoundException: test.xml (指定されたファイルが見つかりません。)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:152)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:106)
        at com.example.App.StAX(App.java:137)
        ... 1 more

 

1行目の説明

Exception in thread "main" java.lang.RuntimeException: test.xml (指定されたファイルが見つかりません。)

1行目: java.lang.RuntimeException → 例外クラス名
    test.xml (指定されたファイルが見つかりません。) → 例外メッセージ

 

2行目以降

at com.example.App.StAX(App.java:161)
  • at com.example.App → クラス名
  • StAX → メソッド名
  • App.java:161 → ファイルと行数

 

スタックトレースは読み進め方

スタックトレースは、上から読んでいくのがエラー箇所を素早く特定できるためおすすめです。mainメソッドは見つけやすいため、下から読みがちですが、下から読むと全てのメソッドを追ってしまうことになってしまいます。

 

おすすめの進め方

1、スタックトレースは上から読む
2、最上段の1行+例外種別+メッセージをまず確認する
3、IDEから該当行にジャンプしてブレークポイントで確認する
4、入力値やユーザ情報はログに出しておき、スタックトレースとセットで見る
5、例外メッセージに“何が・なぜ”をしっかり書く

 

デバック方法(VSCode例)

スタックトレースでエラー箇所と行数が特定できたら値や処理の流れも確認し、原因箇所を明確に特定していきましょう。

 

ブレークポイントを置

原因箇所周辺にブレークポイントを置きます。

 

デバックする

Run and Debug(実行とデバッグ)からデバックを実行します。実行するとブレークポイントを置いた箇所で実行が一時停止されます。

 

変数なども確認できる

停止中にカーソルを変数を合わせたり、変数パネルで変数の中身も確認することが可能です。

 

まとめ

スタックトレースは、ただのエラー表示ではなく、どのメソッドをどの順番で通ってきたかを明確に表してくれます。この記事を参考にスタックトレースも一つずつ追ってみてください。
エラーの特定を速度が改善されるかもしれません。

  

ドキュメント

【公式ドキュメント】
Java SE Specifications (oracle.com)

 

最後に

Javaの環境構築は、この記事を参照してみてください。
【開発環境構築】VS CodeでJavaを使用するための環境構築を実施する – SEもりのLog (selifemorizo.com)

以上、ログになります。
これからも継続していきましょう!!

Javaサーバーサイド関連
シェアする
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

タイトルとURLをコピーしました