2012-03-26 56 views
3

我正在使用eclipse編寫java代碼。如果我正在調試一些代碼,我可以設置一個斷點並隨着代碼遍歷每個函數或者我可以回溯。我也可以看看調用層次結構或引用來獲取想法。但這還不夠。多線程基於時間的調用層次結構

我希望有一些基於時間的可視化,說明每個線程沿着這個過程正在做什麼......讓我們說「點A」(按下界面上的按鈕)到「點B」(得到結果)。我想知道按什麼順序調用了哪些類/方法。我想要一個很好的方法來可視化一種方法產生的輸出是什麼樣的,另一種方法是引發一個新的過程......等等。

分析器是這種類型的可視化唯一可用的東西嗎?基本上我想要創建一個動作圖或流程圖。有一些插件或應用程序可以產生這樣的東西嗎?

編輯:這是我在想什麼的例子......至少在視覺上: essmodel.sourceforge.net/index.html 它具有這樣的代碼是導致一些流動。但是我認爲這只是一個什麼類可以導致其他類的靜態映射,以及可用的輸入/輸出選項。我想根據特定情況映射流程。

+0

您如何看待AOP,像aspectj?攔截你關心的方法調用,並記錄你想要的。 – Ron 2012-03-30 15:59:43

回答

0

我相信使用探查器將是您的最佳選擇。你熟悉VisualVM嗎?它附帶了JDK(在JDK的bin目錄中查找「jvisualvm.exe」),並且在配置正確的情況下能夠自動分析本地虛擬機以及遠程計算機。它確實給出了線程正在運行的代碼和他們正在花費的代碼,所以我認爲你可以很容易地從中做出你需要的東西。最重要的是,它是免費的:)

正如我所說的,局部分析是一件輕而易舉的事。您只需運行JVisualVM.exe獨立版,它會自動查找在本地計算機上運行的所有Java進程(您可以從VisualVM提供的菜單中選擇它們)。如果要遠程配置文件,設置以下VM參數不管它是你正在運行:

-Dcom.sun.management.jmxremote.port=[0-65535] 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

然後VisualVM的範圍內,使用遙控器的JVM上運行的機器的主機名和你配置的端口在上面的第一個VM參數中。

+0

visualVM只有累計的調用堆棧信息,沒有按時間順序排列的信息,而不是問題要求的時間分辨視圖。 – 2012-03-27 09:06:36

+0

我在想像更像這樣的東西: http://essmodel.sourceforge.net/index.html 它有一些代碼流向的地方。但是我認爲這只是一個什麼類可以導致其他類的靜態映射,以及可用的輸入/輸出選項。我想根據特定情況映射它。 – user701273 2012-03-30 15:46:18

3

JProfiler提供了這樣一個觀點,這就是所謂的「呼叫追蹤」:

enter image description here

重要的是要非常小心,以免記錄到的數據量限制你的過濾器是非常重要的。

免責聲明:我公司開發JProfiler。