日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何利用ide进行跟踪调试_使用调试器进行事后跟踪

發(fā)布時(shí)間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何利用ide进行跟踪调试_使用调试器进行事后跟踪 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如何利用ide進(jìn)行跟蹤調(diào)試

我最近一直在使用的大多數(shù)調(diào)試器的好功能是能夠在斷點(diǎn)上記錄信息。 這對(duì)于理解代碼而無(wú)需修改是非常有用的,因?yàn)樗婕白止?jié)碼修改。

讓我們考慮一下這種非常瑣碎且效率低下的函數(shù)實(shí)現(xiàn),以返回斐波那契數(shù)列中的第n個(gè)數(shù)字。

public class Fib {public long fib(long number) {return number < 1 ? 0 : // Breakpoint herenumber < 2 ? 1 : fib(number - 2) + fib(number - 1);}public static void main(String[] args) {Fib fib = new Fib();System.out.println(fib.fib(10L));}}

現(xiàn)在我們添加一個(gè)簡(jiǎn)單的斷點(diǎn),我將對(duì)其進(jìn)行一些修改,以使其不會(huì)停止; 但是它將記錄一個(gè)簡(jiǎn)單的表達(dá)式,該表達(dá)式為我們提供number的當(dāng)前值

這為我們效率不高的代碼提供了以下輸出:

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

因此,我們此處要做的是添加事后跟蹤,您甚至可能無(wú)法訪問(wèn)源,仍然能夠從代碼的工作中獲取有用的信息。

現(xiàn)在,與上面的示例明顯不同的是,我們一次又一次地計(jì)算相同的值。 因此,這里是代碼的另一個(gè)版本,它改用Map來(lái)存儲(chǔ)序列中先前計(jì)算的值。 還請(qǐng)注意,在不使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));}}

這里需要注意兩件事,首先,斷點(diǎn)日志表達(dá)式應(yīng)評(píng)估Lambda參數(shù)n的值,其次是您應(yīng)始終將表達(dá)式放在新行上,以便將來(lái)的開發(fā)人員可以輕松地對(duì)其進(jìn)行斷點(diǎn)。 (現(xiàn)在,如果將代碼放在其中,看起來(lái)會(huì)小很多/漂亮/聰明)。

因此,跟蹤輸出現(xiàn)在如下所示,因?yàn)槊總€(gè)值只計(jì)算一次,所以效果更好。

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

該博客中的屏幕截圖來(lái)自Jdeveloper。 但是Intelij和Netbeans中都提供了類似的功能,如果您有點(diǎn)狡猾,可以在Eclipse中獲得類似的功能。

參考: Gerard Davison博客博客中使用 JCG合作伙伴 Gerard Davison 的調(diào)試器進(jìn)行事后跟蹤 。

翻譯自: https://www.javacodegeeks.com/2014/01/post-hoc-tracing-using-a-debugger.html

如何利用ide進(jìn)行跟蹤調(diào)試

總結(jié)

以上是生活随笔為你收集整理的如何利用ide进行跟踪调试_使用调试器进行事后跟踪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。