2013-07-16 67 views
10

我目前正在開發Java Agent以促進新舊Java應用程序的動態檢測。調試Java代理

就我看來,就IDE調試而言,Java代理可能被認爲是一種特殊情況,因爲它們需要被注入到目標JVM進程才能運行。這自然就引發了一個關於如何進行調試,測試和分析代理類型應用程序的問題。

粗略搜索現有解決方案後,出現了一些基於命令行的選項(即YourKit,JIP等),但其中很多都是Java代理。至少在我看來,如果被利用,會導致代理調試/分析另一個代理的相當奇怪的情況。我知道代理可以堆疊在一個分層結構中,但是我不確定代理應用程序是否可以通過在此莊園中堆疊代理進行調試。

回答

8

正如Java How To ... The -javaagent: Option說:

的代理只是在你的主要方法前面的攔截器,在同一個JVM中執行 ,由同一系統類加載器加載,並 通過相同的安全策略管理和上下文。

該名稱具有誤導性,因爲代理通常建議 遠程工作並與主實體分開工作。但是 事實證明,java代理在-javaagent中使用:比這更簡單 。

一個java應用程序可以通過使用 -javaagent:option任意次數來擁有任意數量的代理。代理程序的調用順序與選項中指定的順序相同。

每個代理也可能採取字符串值的參數。我想這就是爲什麼我們不得不多次爲多個代理使用這個選項的原因 。 否則,我們可能剛剛做了類似:

-javaagent agent1.jar:agent2.jar 

,這是不正確。

因此,通過在您自己的代理之前放置探查器代理(例如YourKit,JIP等)將調試控制給您。

+1

您從[Java如何... -javaagent:選項](http://javahowto.blogspot.nl/2006/07/javaagent-option.html)複製了大部分文章,但沒有署名。 – Virtlink

+0

我已經在文本中提供了參考(從頭開始),所以我沒有明白你的觀點。你有什麼建議? –

+0

@MohammadDashti - 只需向您的帖子中添加鏈接是不可接受的歸因。您*必須*將任何複製的措辭放在塊引號中,並清楚地標識它從哪裏複製而來。我已經在上面做過了。 –