2013-01-15 35 views
6

我可以使用Thread.currentThread().getStackTrace()來檢索當前堆棧跟蹤,但這隻給出了調用中涉及的類。是否有可能檢索呼叫跟蹤中涉及的對象實例?也許某種類型的圖書館可以讓我從堆中收回物品?獲取涉及Java堆棧跟蹤的對象

我有一個問題,需要我追溯到一個Spring bean,它間接創建了我請求堆棧跟蹤的對象。

UPDATE 如果在Java中沒有內置工具,我正在尋找一個可嵌入的庫,它可以在運行時爲我執行此操作。

+0

這似乎是黑客JVM –

回答

1

這是一個非常有趣的想法,但不幸的是,整個沒有,你不能,這是不可能的。

UPD:回答爲「否」的原因之一是,如果可能的話,那麼對所有創建的對象的引用列表必須存在。但在這種情況下,Java GC根本無法工作。

+2

該參數不成立:Java具有'WeakReference'這種用例。 –

+0

不是存儲調用中涉及的所有對象引用的堆嗎?我的意思是一旦子函數調用完成,JVM就必須恢復調用方法。是不可能訪問堆的這部分? – NagyI

0

您可以試試housemd。它由一名工程師@阿里巴巴開發,可安全地在生產環境中使用,例如, taobao.com。

其特徵包括:

Display object field value 
Output invocation stack trace 

下面是示例截圖: enter image description here

+0

似乎我不清楚我的問題。我正在尋找一個可嵌入的庫,它可以在運行時爲我做同樣的事情。 – NagyI

0

嘗試Eclipse調試器,以查看在特定的方法中使用的對象的值。在要暫停程序的行上放置斷點。

+0

我已更新了最初的帖子。 – NagyI