Java NullPointerExceptionスタックトレースの解析

Java NullPointerExceptionスタックトレースを解析。JVM例外フォーマットからクラス名、メソッドシグネチャ、ファイルパス、行番号を抽出します。

Java

詳細な説明

Java NullPointerExceptionスタックトレースの理解

NullPointerException(NPE)は最も悪名高いJavaランタイム例外です。コードがオブジェクトが必要な場所でnull参照を使用しようとした場合に発生します。

標準Javaスタックトレースフォーマット

java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
    at com.example.service.UserService.validateName(UserService.java:87)
    at com.example.controller.UserController.createUser(UserController.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Java 14+のヘルプフルNullPointerExceptions

Java 14以降、JVMはJEP 358を通じてはるかに有用なNPEメッセージを提供します:

  • Cannot invoke "String.length()" because "str" is null
  • Cannot read field "name" because "this.user" is null

スタックフレームコンポーネント

各Javaスタックフレームには以下が含まれます:

  • 完全修飾クラス名 --- com.example.service.UserService
  • メソッド名 --- validateName
  • ソースファイル --- UserService.java
  • 行番号 --- :87
  • 特殊マーカー:(Native Method)(Unknown Source)

フレームワークフレームのフィルタリング

Webアプリケーションのjavスタックトレースには、Spring、サーブレットコンテナ、リフレクション層からの多数のフレームワークフレームが含まれることがよくあります。自分のパッケージ名前空間のフレームを特定し、sun.reflectorg.springframework.webなどのフレームワーク内部を無視することが重要です。

ユースケース

NullPointerExceptionsはAndroidアプリからエンタープライズSpring Bootサービスまで、事実上すべてのJavaアプリケーションに出現します。Splunk、Datadog、ELKスタックなどの本番監視ツールがアプリケーションログからこれらのトレースをキャプチャします。フレームワークフレームをすばやくフィルタリングしてアプリケーションコードに集中する能力は、効率的なインシデント対応に不可欠です。

試してみる — Stack Trace Parser & Formatter

フルツールを開く