2013-06-28 68 views
3

我最近被告知,如果你看一下Java程序的調試信息,你可以獲得更多關於它的信息,而不是反射。我意識到,雖然我真的不知道什麼,也許除了內存位置等。那麼你還可以通過調試信息來獲得反射信息(注意:我不是在談論使用斷點來獲取實際的運行時值)嗎?是否有任何信息可以通過反射得到,而不能從調試器獲得?使用反射的調試器信息我能得到什麼?

回答

1

即時通過「使用調試器信息」你實際上是指「使用agent API」,這是調試器(等)使用的。

答案相當多。

對於啓動JVMTI可以force garbage collection,這不是純粹的Java API可以。這對於特定類型的應用並且與普通智慧相反,即使對於「生產」代碼也是有用的。

你也可以在加載時加載類。這對於各種分析器工具,編譯代碼的模糊處理(加密類文件)以及即時更改已加載的類以響應源代碼中的更改非常有用(請參閱jrebel的示例)

+0

更不用說您的代理是以C語言而不是Java語言運行,因此您可以根據需要更改字面上關於該進程的任何內容,因爲沒有內存安全限制。通過API可用的另一件事是訪問其他更高級別堆棧幀中的變量以及關於堆棧幀本身的元數據。如果您希望在單獨的Java進程中編寫代碼(我相信這是大多數調試工具所做的),您可以通過'jdwp'代理使用這些API。 – Dan

相關問題