首頁  >  文章  >  Java  >  java如何定位異常堆疊中異常產生的位置

java如何定位異常堆疊中異常產生的位置

(*-*)浩
(*-*)浩轉載
2019-09-25 16:00:413606瀏覽

異常堆疊作為我們平時定位問題的最重要手段,為我們解決問題提供了很大幫助。但是我們可能都有這樣的習慣就是看到一段異常,尤其是異常堆疊很多,層次很深的時候。

java如何定位異常堆疊中異常產生的位置

就覺得很擔心害怕,匆匆掃描一眼就開始猜問題應該如何,然後不斷的根據猜測去調整程式碼,雖然也會debug但是還是浪費了不少的時間。

這是因為:

1.我們沒有認認真真的看異常堆疊資訊;

2.堆疊太多,我們並不確定到底哪裡導致了問題。

解決方法就是:

1.知道異常堆疊產生的流程。

2.耐心的閱讀堆疊資訊。

3.解決問題

1.異常產生流程:上面報錯,下面跟著

舉例:我們有如下的測試程式碼

package com.bsx.test;

public class TestException {
    public static void main(String[] args) {
        TestException exception = new TestException();
        exception.m1();
    }

    public void m1() {
        m2();
    }

    public void m2() {
        m3();
    }

    public void m3() {
        String name = null;
        System.out.println(name.length());
    }
}

執行後輸出結果如下:

Exception in thread "main" java.lang.NullPointerException
	at com.bsx.test.TestException.m3(TestException.java:22)
	at com.bsx.test.TestException.m2(TestException.java:17)
	at com.bsx.test.TestException.m1(TestException.java:13)
	at com.bsx.test.TestException.main(TestException.java:9)

我們可以看到,這個錯誤日誌輸出的順序跟呼叫順序是相反的,為什麼呢?

我們知道java的方法在執行的時候是在虛擬機器堆疊中執行的,每執行一個方法就會新建一個堆疊幀然後壓入到虛擬機器堆疊中。

這是一個後進先出的結構,所以報錯的時候也是從被調用者最開始報錯,然後調用者依次報錯,所以打印錯誤時的順序也是報錯的位置在最上面,調用者依序向後排。由此我們可以得出結論:上面報錯,下面跟隨。

2.讀懂報錯資訊:尋找我們程式碼報錯的位置

從上面的分析我們知道報錯位置在上面。大部分情況下,最上方的報錯資訊就是我們代碼出錯的位置。

但是有時候最上方的日誌並不是我們自己的程式碼,那是因為我們的程式碼呼叫了一些三方jar套件的程式碼。但這並不影響我們去定位問題,我們還是根據上面報錯,下面跟隨來定位問題,那麼真正報錯的位置還是在上面。

那麼我們只需要從上往下依序找我們自己的程式碼。第一個找到的我們的程式碼位置就是我們程式碼中引發報錯的位置。有時候有些報錯資訊很明顯,我們可以根據報錯資訊來直接定位到問題癥結。

有時候報錯訊息並不能很明確的指明報錯原因,這時候,我們就可以在這個精確的位置打上斷點來調試一下。

以上是java如何定位異常堆疊中異常產生的位置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除