私はJavaでEclipseとプログラミングを使用しています。時々私はnullPointerExceptionに遭遇し、数時間私を悩ますでしょう。とにかくnullPointerExceptionsをデバッグして、どのような変数値があるのか、そしてnullポインタ例外を引き起こす他のものを見つけ出していますか?nullPointerExceptionをデバッグする良い方法
答えて
スタックトレースを調べて、NullPointerException
がスローされた行番号を読み取ります。ほとんど常に、ラインはx
がnull
ある場合は、あなたがNullPointerException
を得る
x.getValue()
のようないくつかのメソッド呼び出しを持っています。スタックトレースの最上位にあるメソッドがあなたのコードでない場合は、コードに達するまで、スタックを完全にトレースしてください。このケースでは、null
のパラメータを好きではないメソッドにnull
を渡すことがよくあります。見つけて修正してください。
さらに、NullPointerException
を投げている方法ではない場合、ドキュメントをお読みください。例えば、String.replace(CharSequence target, CharSequence replacement)
を見て:
は例外:
NullPointerException
からtarget
やreplacement
がnull
ある場合。
これ以上はっきりしません。
は、ここに例を示します
foo.bar()
を参照してください。これは、
foo
が
null
であることを意味します。それは簡単です。別の例を見てみましょう:
コードに遡っ、我々はs.replace(target, replacement)
が投げていることがわかります。我々はtarget
とreplacement
を調べるべきです。のは、デバッガをアタッチしてみましょう:
なるほど! replacement
はnull
です。 Eclipseでも同じことができます。例外がスローされたときにブレークポイントを設定し、それを使用してメソッドへのパラメータを検査します。私はここで原始的です。なぜなら、まずは難しい方法を最初にやることを学んだら、皆がもっと良くなると本当に信じている思考の学校から来たからです。リーキー抽象化とそのすべて。
フリーハンドのサークルを使った例やスクリーンショットは素晴らしいでしょう:) – hexafraction
私の問題は、関数(a、b、c、d、e)のような関数では、それらの変数のどれがnullであるかを教えてくれません。 –
@六角形:またはより良い、円と矢印の付いた光沢のある写真の8x10と、それぞれが使用されるべきものを説明する段落の段落。 –
問題のNullPointerException
あまりを作るためにいくつかの方法があります。
は@Nullable annotationを使用してください。
コンストラクタとセッタで
null
の引数の値をテストします(一般的な古いJavaコードのセッタは避けてください)。これをたくさんすると、(Eclipse)ソースコードテンプレートを作成してコードをすばやく生成することができます。これは「フェイルファースト」と呼ばれ、値がコード内でさらに使用されているときに例外がスローされるのを待つことはありません。それをフィールドに保管した後。1行に最低限の操作(例:1または2)を実行するようにしてください。あなたがしなければ、
NullPointerException
が1行の式でどこに出現したのかを知る必要があります。状態を示すフィールドに
null
を使用しないでください。代わりに、例えばenum State
。例えば。null
を確認することを忘れやすいので、if (socket == null) { // not connected }
を実行しないでください。明示的な状態は忘れにくいです。明示的に必要な場合を除き、ローカル変数を
null
に初期化しないでください。実際には、スコープと例外を正しく処理すると、ほとんどの変数にfinal
をマークできるはずです。デフォルトのprintStacktrace()
メソッドをthrow new IllegalStateException("Unhandled program state", e)
に置き換えると、コードブロックの終了点として認識されるので便利です。
多くのプログラミングの後に、NullPointerException
の数が少なくなることがわかります。
あなたはヌル ポインタをキャプチャするために、
BreakPoints
ビューを使用することができますデバッグ中。[ウィンドウ] - > [ビューの表示] - > [ブレークポイント
ビューで
"J!"
あなたが 例外にブレークポイントを設定することができますことがあります。java.lang.NullPointerException
を設定することができます。したがって、 ヌルポインタ例外がスローされると、どの変数が をnullにしているかを確認できます。あなたがコーディングしている間に可能なヌルポインタアクセスをキャプチャすることができます。オフコースでは、この設定を使用してすべてのヌルポインタをキャプチャできません。しかしそれでも役立つ、あなたの食の中で次の設定を設定します。
設定 - > Javaの - >コンパイラ - >エラー/警告 - >ヌル分析
- 1. AndroidアプリでNullPointerExceptionをデバッグする方法は?
- 2. Visual Studio Designerのエラーをデバッグするには良い方法
- 3. ルビーのサードパーティ製の宝石をデバッグする最良の方法
- 4. NavigationService.GoBack()の問題をデバッグする最良の方法は?
- 5. 靴アプリケーションをデバッグする最も良い方法は何ですか?
- 6. 誰もがWPFのフォーカスをデバッグする良い方法がありますか?
- 7. ソースコードでナゲットパッケージをデバッグする最も良い方法は何ですか?
- 8. デバッグ用Linuxカーネルをデバッグする方法
- 9. NullPointerExceptionを回避する方法は?
- 10. JSPでNullPointerExceptionを解決する方法
- 11. 一見良いコードでNullPointerExceptionを取得していますか?
- 12. 良い方法
- 13. 良い方法
- 14. 良い方法
- 15. asp.netのシリアライゼーション例外をデバッグする最良の方法は何ですか
- 16. JavaScriptとCSSをデバッグする最良の方法は何ですか?
- 17. Emacs:Pythonをデバッグする方法
- 18. プリプロセッサマクロをデバッグする方法
- 19. ハンギングアクションをデバッグする方法
- 20. ウォッチドッグタイムアウトをデバッグする方法
- 21. Rsweaveをデバッグする方法
- 22. フィドラーエクステンションをデバッグする方法
- 23. アンドロイドアプリケーションをデバッグする方法
- 24. Aquamacsをデバッグする方法
- 25. トレースレスクラッシュをデバッグする方法
- 26. UIGestureRecognizersをデバッグする方法
- 27. rails - Delayed Job - 失敗したジョブをデバッグする最良の方法
- 28. IntelliJまたはWebStormでNode.jsアプリケーションをデバッグする最良の方法
- 29. テンソルフローソースを変更する良い方法
- 30. .NETアセンブリをプリロードする良い方法
スタックトレースを見て...それはラインがNPEを投げたかを示して、あなたが置くことができますそこにブレークポイントがあり、どの変数がヌルであるかを確認してください。 – chancea
NPEをデバッグする方法を学ぶ最も良い方法は、デバッグを続けることです。あなたは時間をかけてそれを良くするでしょう。しかし、鍵は、どこで発生しているのかを調べ、変数をチェックすることです。ここには魔法はありません。 –
あなたのコードに 'assert'文を置くことができます – MadProgrammer