2012-08-04 53 views
4

您是否可以在程序中打印出代碼中的哪一行以及運行線程所在的方法 - 而不使用visualvm等監視軟件?你是否需要擴展Thread?如何查看線程在代碼中的位置java

+0

*「如何查看線程在代碼中的位置..」** **爲什麼要查看線程在代碼中的位置(使用任意約束)?這個支持什麼程序功能? – 2012-08-04 01:54:54

+0

如果某個線程在網絡呼叫中卡住,並且有很多不同的網絡呼叫,那麼知道哪一個呼叫有幫助 – 2012-08-04 02:04:45

+0

您想做什麼?有沒有你正在努力處理的具體問題,還是出於好奇,這只是一個更普遍的問題? – 2012-08-04 06:11:56

回答

1

您可以撥打電話Thread.getStackTrace()。它返回一個表示當前StackTrace的StackTraceElement的數組。記住前幾個元素將會是Thread中的方法將會很有幫助,所以你可能感興趣的那些元素將在陣列中稍微有些變化。

當然,你需要獲得當前正在運行的Thread的保持......

Thread.getCurrentThread().getStackTrace() 
+0

stackTraceElement將位於[1]而不是[0]位置。 – bestsss 2012-08-05 15:43:35

3

如果這只是快速和骯髒的調試或錯誤報告,你可以做

new Exception().printStackTrace() 

如果您想要比這更小一點,可以使用Thread.currentThread().getStackTrace()來獲取一組StackTraceElement對象;您可以通過檢查這些來確定當前行號。

2

只需使用Thread.dumpStack()即可打印堆棧(類似於未捕獲到異常時)。沒有必要創建一個新的例外。

2

使用幾乎所有的日誌框架,支持最多線程組/名稱,類,方法,文件名和行號功能

0

你可以檢查出JDBThis link顯示了一個使用它來調試併發問題的例子。 This也只是顯示了它的一些基本功能。它相當不錯,我相信它應該已經在你的JAVA_HOME/bin中。

另一種選擇是檢查JUCProfiler,我沒有試過這個,但它看起來很體面。