如何利用ide进行跟踪调试_使用调试器进行事后跟踪
如何利用ide進行跟蹤調試
我最近一直在使用的大多數調試器的好功能是能夠在斷點上記錄信息。 這對于理解代碼而無需修改是非常有用的,因為它涉及字節碼修改。
讓我們考慮一下這種非?,嵥榍倚实拖碌暮瘮祵崿F,以返回斐波那契數列中的第n個數字。
現在我們添加一個簡單的斷點,我將對其進行一些修改,以使其不會停止; 但是它將記錄一個簡單的表達式,該表達式為我們提供number的當前值
這為我們效率不高的代碼提供了以下輸出:
ebugger connected to local process. Source breakpoint: Fib.java:11, evaluate(number)=10 (long) Source breakpoint: Fib.java:11, evaluate(number)=8 (long) Source breakpoint: Fib.java:11, evaluate(number)=6 (long) Source breakpoint: Fib.java:11, evaluate(number)=4 (long) Source breakpoint: Fib.java:11, evaluate(number)=2 (long) Source breakpoint: Fib.java:11, evaluate(number)=0 (long) Source breakpoint: Fib.java:11, evaluate(number)=1 (long) Source breakpoint: Fib.java:11, evaluate(number)=3 (long) Source breakpoint: Fib.java:11, evaluate(number)=1 (long) Source breakpoint: Fib.java:11, evaluate(number)=2 (long) ... sometime later Source breakpoint: Fib.java:11, evaluate(number)=1 (long) Source breakpoint: Fib.java:11, evaluate(number)=2 (long) Source breakpoint: Fib.java:11, evaluate(number)=0 (long) Source breakpoint: Fib.java:11, evaluate(number)=1 (long) 55因此,我們此處要做的是添加事后跟蹤,您甚至可能無法訪問源,仍然能夠從代碼的工作中獲取有用的信息。
現在,與上面的示例明顯不同的是,我們一次又一次地計算相同的值。 因此,這里是代碼的另一個版本,它改用Map來存儲序列中先前計算的值。 還請注意,在不使Lambda變得不那么漂亮的情況下,向此代碼添加跟蹤比在以前的情況下更加痛苦。
import java.util.HashMap; import java.util.Map;public class Fib {Map<Long, Long> data = new HashMap<>();{data.put(1L, 1L);}public long fib(long number) {return data.computeIfAbsent(number,n -> n < 1 ? 0 : fib(n - 2) + fib(n - 1)); // Breakpoint here}public static void main(String[] args) {Fib fib = new Fib();System.out.println(fib.fib(10L));}}這里需要注意兩件事,首先,斷點日志表達式應評估Lambda參數n的值,其次是您應始終將表達式放在新行上,以便將來的開發人員可以輕松地對其進行斷點。 (現在,如果將代碼放在其中,看起來會小很多/漂亮/聰明)。
因此,跟蹤輸出現在如下所示,因為每個值只計算一次,所以效果更好。
Debugger connected to local process. Source breakpoint: Fib.java:17, evaluate(n)=10 Source breakpoint: Fib.java:17, evaluate(n)=8 Source breakpoint: Fib.java:17, evaluate(n)=6 Source breakpoint: Fib.java:17, evaluate(n)=4 Source breakpoint: Fib.java:17, evaluate(n)=2 Source breakpoint: Fib.java:17, evaluate(n)=0 Source breakpoint: Fib.java:17, evaluate(n)=3 Source breakpoint: Fib.java:17, evaluate(n)=5 Source breakpoint: Fib.java:17, evaluate(n)=7 Source breakpoint: Fib.java:17, evaluate(n)=9 55 該博客中的屏幕截圖來自Jdeveloper。 但是Intelij和Netbeans中都提供了類似的功能,如果您有點狡猾,可以在Eclipse中獲得類似的功能。
翻譯自: https://www.javacodegeeks.com/2014/01/post-hoc-tracing-using-a-debugger.html
如何利用ide進行跟蹤調試
總結
以上是生活随笔為你收集整理的如何利用ide进行跟踪调试_使用调试器进行事后跟踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在电脑上使用Snapseed修图电脑
- 下一篇: JDK 12,合并的收集器和命名的挑战