做视频网站带宽要求,百度首页清爽版,互联网公司排名深信服,wordpress install.php 500如何利用ide进行跟踪调试我最近一直在使用的大多数调试器的好功能是能够在断点上记录信息。 这对于理解代码而无需修改是非常有用的#xff0c;因为它涉及字节码修改。 让我们考虑一下这种非常琐碎且效率低下的函数实现#xff0c;以返回斐波那契数列中的第n个数字。 publi… 如何利用ide进行跟踪调试 我最近一直在使用的大多数调试器的好功能是能够在断点上记录信息。 这对于理解代码而无需修改是非常有用的因为它涉及字节码修改。 让我们考虑一下这种非常琐碎且效率低下的函数实现以返回斐波那契数列中的第n个数字。 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));}} 现在我们添加一个简单的断点我将对其进行一些修改以使其不会停止 但是它将记录一个简单的表达式该表达式为我们提供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 {MapLong, 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中获得类似的功能。 参考 Gerard Davison博客博客中使用 JCG合作伙伴 Gerard Davison 的调试器进行事后跟踪 。 翻译自: https://www.javacodegeeks.com/2014/01/post-hoc-tracing-using-a-debugger.html如何利用ide进行跟踪调试