運行時獲取方法調用堆棧信息(java)

前幾日系統流程回調時,一個方法莫名其妙被調用,沒法定位調用點。最後打印堆棧調用信息,找到問題點。java

具體使用以下:ide

 在須要跟蹤的方法中嵌入以下代碼(固然AOP是個更好的選擇):spa

        Throwable ex = new Throwable();
        StackTraceElement[] stackElements = ex.getStackTrace();

        if (stackElements != null) {
            for (int i = 0; i < stackElements.length; i++) {
                System.out.println(stackElements[i].getClassName());//返回類的徹底限定名,該類包含由該堆棧跟蹤元素所表示的執行點。
                System.out.println(stackElements[i].getFileName());//返回源文件名,該文件包含由該堆棧跟蹤元素所表示的執行點。
                System.out.println(stackElements[i].getLineNumber());//返回源行的行號,該行包含由該堆棧該跟蹤元素所表示的執行點。
                System.out.println(stackElements[i].getMethodName());//返回方法名,此方法包含由該堆棧跟蹤元素所表示的執行點。
                System.out.println("-------------第"+i+"級調用-------------------");
            }
        }orm

 

示例結果以下:get

Data.java
5
finish
-------------第0級調用-------------------
cn.sccl.Test
Test.java
6
main
-------------第1級調用-------------------it

相關文章
相關標籤/搜索