Zviki Cohen基於自己探索和理解他人所編寫代碼的體驗,發布了跟蹤Java執行過程的5種方法。他發現簡單的閱讀源代碼(有些情況下是反編譯代碼),可能是十分乏味和有錯誤傾向的過程。
作為替代,他推薦了5種不同運行時跟蹤方法以在Java代碼運行時觀察它,消除了學習他人代碼的許多不利條件。以下濃縮了他的5個建議:
1、基本方法:斷點和單步執行
“以最簡單的方法開始:設置斷點並開始跟蹤妳的程序執行。它在這些時候是最好的:妳需要壹個快速且簡單的解決方案,妳擁有所有代碼並且知道想在哪裏停止執行。妳需要在給定斷點設置精細的信息(參數、局部變量等等)。”
2、初級方法:調試消息
“我們通過設置調試消息來繼續對程序跟蹤。最簡單的方法是使用System.out.println語句把消息打印到控制臺。 它在這些時候是最好的:妳擁有代碼且很清楚妳正在尋找什麽。對事件處理器來說這是非常好的解決方案。當貫穿某壹復雜流程的執行過程時,它的高性能對理解觸發了哪個事件是非常實用的。”
3、熱門方法:動態代理(Dynamic Proxy)
“這是在簡單調試消息之上所做的改進。動態代理是壹個特定的Java特性,它允許開發者引入proxy類,加進某壹給定類之前,並通過某壹給定接口截獲所有調用。它在這些時候是最好的:它對事件處理器來說是非常好的解決方案。妳可以在很短時間內用壹個普通代理設置壹個虛擬事件處理器,來查看事件發生順序。當需要理解事件處理器時這是最簡單和快捷的方法。”
4、暴力方法:運行時剖析器(Run-time Profiler)
“剖析器是通過特定的JVM hooks在系統中跟蹤所有調用的強大工具。但是用它來跟蹤執行過程是大才小用。它在這些時候是最好的:妳想擁有壹個特定操作的完整畫卷(如,非常短的執行流程)。”
5、新時代:Aspects
“面向方面編程(Aspect Oriented Programming——AOP)是壹個非凡的想法。無需深入Aspect概念,這裏只考慮其能力:它是截獲妳的代碼執行既快速又容易的方法。妳可以圍繞方法、構造器、屬性訪問等等有選擇地設置hook,而不需要修改原始代碼。在這些hook中,妳可以打印調試消息。它在這些時候是最好的:妳想跟蹤可重新構建的代碼執行。”