我從來沒有做過或見過這樣的事來使用它,但它似乎是一個有趣的問題。我的想法是使用the java debugger (jdb)來運行代碼,而不僅僅是java
命令。
您可以逐行執行代碼(通過jdb中的step
命令),並且每次執行其行號時都會吐出。這需要PHP方面的一點幫助(它必須解析行號以及執行下一步命令),但行號在那裏。這是一個非常基本的Java程序的示例輸出。
的Java(TestClass.java)
public class TestClass {
public static void main(String[] args) {
System.out.println("foo");
System.out.println("bar");
}
}
加多寶(加多寶的TestClass運行javac TestClass.java
後)
Initializing jdb ...
> stop at TestClass:3
Deferring breakpoint TestClass:3.
It will be set after the class is loaded.
> run
run TestClass
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint TestClass:3
Breakpoint hit: "thread=main", TestClass.main(), line=3 bci=0
3 System.out.println("foo");
main[1] step
> foo
Step completed: "thread=main", TestClass.main(), line=4 bci=8
4 System.out.println("bar");
main[1] step
> bar
Step completed: "thread=main", TestClass.main(), line=5 bci=16
5 }
main[1] step
>
The application exited
如果你真的想要使用行號_without_ throwing異常,你可以編寫自己的'ClassLoader',這將能夠爲您提供一個工具來獲取行號表;但是,您可能還需要將自己的擴展寫入'Thread'以具有用於當前JVM字節碼指令的可用接口。這是可行的,因爲異常拋出對你來說已經是這樣了,但對於不同結構化日誌通常不必要的東西來說,這是很多工作。 –
感謝您的支持!我理解編譯和解釋語言之間的區別,並知道獲取執行Java(或任何編譯語言)的行號並不是微不足道的。我已決定與Cobertura一起創建報告。我從來沒有使用過代碼覆蓋工具,所以這會花費我一些時間來弄清楚。請參閱此帖子下方的評論。幫助將不勝感激。非常感謝! – DanB91