1
A
回答
4
Stack introspection會給你方法的調用者或者最好的方法的一些細節,對於確切的方法簽名你將不得不使用反射。
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
官方文件說:
返回表示該線程堆棧轉儲 堆棧跟蹤元件的陣列。如果此線程尚未啓動或終止,此方法將返回一個零長度數組。如果返回的數組長度爲非零長度 ,則數組的第一個元素表示堆棧的頂部 ,這是 序列中最新的方法調用。數組的最後一個元素表示 堆棧的底部,這是序列中最近最少的方法調用。
這樣從StackTrace你可以得到方法名稱,文件名,linenumber。
有關完整的方法簽名,你將不得不使用反射
2
您可以使用Java Reflection和StackTraceElement。
StackTraceElement[] elements = new Throwable().getStackTrace();
String calleeMethod = elements[0].getMethodName();
String callerMethodName = elements[1].getMethodName();
String callerClassName = elements[1].getClassName();
System.out.println("CallerClassName=" + callerClassName + " , Caller method name: " + callerMethodName);
System.out.println("Callee method name: " + calleeMethod);
+2
我認爲你的文章是沒有任何幫助我的問題 –
相關問題
- 1. 通用堆棧方法
- 2. 通過調用堆棧傳遞數據,無需修改方法
- 3. 通過堆棧
- 4. 通過調用堆棧繪製圖表
- 5. Java堆棧反省
- 6. 通過Eclipse查看內置Android應用的調用堆棧?
- 7. 通過函數名查找調用堆棧中的父環境
- 8. Android中的方法調用堆棧
- 9. 的Java方法調用堆棧複製
- 10. 顯示不帶方法名稱的調用堆棧
- 11. 的jQuery()方法調用的最大堆棧大小超過
- 12. 調用堆棧
- 13. 可能通過反射來獲取調用方法類的實例,或調用堆棧中的任何方法?
- 14. 堆棧跟蹤方法名稱編輯
- 15. 繞過堆棧大小的方法
- 16. IronPython通過名稱調用方法
- 17. 堆棧列一行通過
- 18. 堆棧溢出調用堆棧#timememoryfunctionlocation 10.0000143728
- 19. 通用方法簽名
- 20. 調用保留調用堆棧的私有方法
- 21. 在Visual Studio 2010中可視化調用方法調用堆棧
- 22. 調用堆棧顯示匿名函數
- 23. IntelliJ:通過簽名找到方法
- 24. JavaScript調用堆棧
- 25. erlang調用堆棧
- 26. jQuery調用堆棧?
- 27. POSIX調用堆棧內存分配
- 28. 超過最大調用堆棧
- 29. 最大調用堆棧超過
- 30. Nodejs RangeError超過最大調用堆棧
是反射是在尋找簽名確實是有用的,但我的要求是,我必須找到調用堆棧內省獲得方法的簽名,我沒有源代碼,我怎麼會知道一些重載哪種方法(比如方法)被調用使用調用堆棧和反射而不使用源代碼我確實有字節代碼? –
我不認爲你可以,afaik只有方法名稱和(如果可用調試-g)行號出現在堆棧跟蹤中。如果它的一次性解決方案嘗試反編譯類和檢查行號 – JIV