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

如何利用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的当前值

屏幕截图2014年1月7日的15.41.37

这为我们效率不高的代码提供了以下输出:

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中获得类似的功能。

参考: Gerard Davison博客博客中使用 JCG合作伙伴 Gerard Davison 的调试器进行事后跟踪 。

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

如何利用ide进行跟踪调试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在树洞里,渝粤题库在线整理

在树洞里 在树洞里&#xff0c;我看到了一些领国家助学金的同学大手大脚&#xff0c;也看到了一些同学好像并不困难&#xff0c;我更看到了许多拿了学校的奖励&#xff0c;可是连写感谢信都不愿意写&#xff0c;觉得很麻烦的同学。我想把我的故事讲给你们听。 我来自单亲家庭…

【渝粤题库】国家开放大学2021春1708农业产业发展规划题目

试卷代号&#xff1a;1708 2021年春季学期期末统一考试 农业产业发展规划 试题 2021年7月 一、单项选择题&#xff08;每题2分&#xff0c;共30分&#xff09; 1.概念规划兴起于20世纪六七十年代&#xff0c;最早源于城市规划领域。我国概念规划的第一个实例是2001年1月完成的&…

Java 11即将发布的功能–启动单文件源程序

Java 11即将完成&#xff0c;并且进入了下降阶段 。 好像在几周前就发布了Java 9&#xff0c;而在这里&#xff0c;距离发布Java 11不到几个月。 鉴于Java的新发行过程和时间表&#xff0c;这将变得司空见惯。 不管那是好事&#xff0c;我们都将其搁置一旁。 这里列出了Java 1…

【渝粤题库】国家开放大学2021春2018货币银行学题目

试卷代号&#xff1a;2018 2021年春季学期期末统一考试 货币银行学试题 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;每小题有一项答案正确&#xff0c;请将正确答案的序号填写在括号内&#xff09; 1.一国国内经济可分为居民、非金融企业、政…

【渝粤题库】国家开放大学2021春2044教育研究方法题目

试卷代号&#xff1a;2044 2021年春季学期期末统一考试 教育研究方法 试题&#xff08;开卷&#xff09; 2021年7月 一、单选题&#xff08;每题5分&#xff0c;共25分&#xff09; 1.探索性研究常采用的研究方式包括( )。 A.文献调查、经验调查、典型情况或个案分析 B.调查性研…

【渝粤题库】国家开放大学2021春2094法理学题目

试卷代号&#xff1a;2094 2021年春季学期期末统一考试 法理学 试题. 2021年7月 一、单项选择题&#xff08;每小题有四个备选答案&#xff0c;其中只有一个正确的&#xff0c;请将正确答案的序号填在题干的括号内。每小题2分&#xff0c;共20分&#xff09; 1.分析法学派认为&…

【渝粤题库】国家开放大学2021春2108刑法学(2)答案

试卷代号&#xff1a;2108 2 0 2 1年春季学期期末统一考试 刑法学(2) 试题答案及评分标准 &#xff08;供参考&#xff09; 2021年7月 一、选择题&#xff08;每小题的备选答案中至少有一个是正确的&#xff0c;请将正确答案的序号字母填入题目括号内。多选、少选均不得分。每小…

截至频率_截至2013年核心Java帖子

截至频率随着2013年即将结束&#xff0c;我最近发现了几篇与我认为“核心Java”知识有关的帖子。 这篇文章列出了三个帖子&#xff0c;并提供了一个简短说明的论坛。 我这样做有两个目的&#xff1a;&#xff08;1&#xff09;帮助其他人意识到这些优秀职位的存在&#xff1b;&…

【渝粤题库】国家开放大学2021春2143西方经济学题目

试卷代号&#xff1a;2143 2021年春季学期期末统一考试 西方经济学 试题 2021年7月 一、单项选择题&#xff08;从下列每小题的四个选项中&#xff0c;选出一项正确的&#xff0c;将其标号填在题后的括号内。每小题2分&#xff0c;共30分&#xff09; 1.作为经济学的一个分支&a…

【渝粤题库】国家开放大学2021春2219房屋构造与维护管理题目

试卷代号&#xff1a;2219 2021年春季学期期末统一考试 房屋构造与维护管理 试题&#xff08;开卷&#xff09; 2021年7月 一、选择题&#xff08;30题&#xff0c;每题2分&#xff0c;共60分&#xff09; 1.如下图所示&#xff0c;形体的W面投影是( )。 2.在三面投影体系中&a…

JDK 12,合并的收集器和命名的挑战

看来可能是一种新的方法&#xff0c;将可在java.util.streams.Collectors类JDK 12即会&#xff0c;根据新方法的提出了基于Javadoc的文档&#xff0c;“返回一个收藏家是将输入的元素两个规定的收藏家并将其结果与指定的合并功能合并。” 目前 &#xff0c;此新Collectors方法的…

【渝粤题库】国家开放大学2021春2238个案工作题目

试卷代号&#xff1a;2238 2021年春季学期期末统一考试 个案工作 试题 2021年7月 一、单选题&#xff08;下列选项中只有一个是正确的&#xff0c;将正确的答案序号填写在括号内。共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 1.下列关于个案工作的特点下列说法正…

【渝粤题库】国家开放大学2021春2321物流学概论题目

试卷代号&#xff1a;2321 2021年春季学期期末统一考试 物流学概论 试题 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff0c;将正确答案选项的字母填入题目中的括号内&#xff09; 1.物流观念的启蒙和产生都是在( )完成的。 A.美国 B.英国 C.日本 D…

【渝粤题库】国家开放大学2021春2409中国古代文学(B)(1)题目

试卷代号&#xff1a;2409 2021年春季学期期末统一考试 中国古代文学(B)(1) 试题&#xff08;开卷&#xff09; 2021年7月 一、填空题&#xff08;每空1分&#xff0c;共20分&#xff09; 1.如果从音乐上进行分类&#xff0c;《诗经》由风、、三部分组成。 2.先秦时期历史散文的…