有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Eclipse中以非侵入式方式在Java程序中添加跟踪

注意:事实上,我会发布一个答案,但欢迎任何其他建议

这个问题需要一点背景,以防止评论质疑我的目标…:-)

在我工作的地方,我们使用了大量的调试,大部分是用Eclipse完成的。 我知道,对一些错误进行分析和断言可以让人们很容易地设计出合适的测试单元

好吧,我在一个遗留应用程序的大型代码库(Java/Swing)上工作,该应用程序是在Java 1.2(甚至1.1)是最新版本时设计的,代码有很多粗陋之处,即使经过多年的工作,我也不能假装知道超过10%的内容! 我们的JUnit测试最多只覆盖了代码的1%(这是最近的实践…)

因此,使用一个好的调试器来检查类、类中的数据、软件的行为以及我们提供的数据类型等是很重要的

然而,循序渐进也有其局限性:它可能很慢,我们可能会遗漏一些内容,而且在某些情况下是不切实际的,比如查看paint()方法或多线程部件

所以我养成了习惯,在这些困难的情况下,到处散布一些System.out.println()语句,看看调用了什么方法,使用了什么参数,以什么顺序,等等。 我可以使用日志,但这种方式更简单,在问题解决后我会删除这些行

这种做法的一个问题是,在提交之前,我们必须仔细检查差异以消除这些行。 另一个问题是,我们使用Perforce作为VCS,这很好,但需要显式签出一个文件(将其状态从只读更改为可写)来添加这样的跟踪。它很慢(使用EclipseP4插件)而且很麻烦

所以,我的问题是:是否可以在不改变源代码本身的情况下,向代码的某些点添加上下文跟踪? 每次运行一行时都可以记录“我在这里,我看到了”

我最初搜索了一个Eclipse插件,只找到了一个C调试器的建议,并找到了一个解决方案(在SO的评论中,我想,但我失去了参考,唉),我将在下面发布,希望它能对其他人有用。 如上所述,任何选择都是好的


共 (2) 个答案

  1. # 1 楼答案

    看看BTrace。您可以编写条件调试/跟踪代码,并在开发期间将其附加到正在运行的JVM。在生产中,此代码将完全不存在

  2. # 2 楼答案

    Eclipse中不需要插件:在需要跟踪的行中添加断点,使其有条件(例如,按住Ctrl键并双击边距中的断点图标;或者右键单击BP列表中的BP行并选择Breakpoint Properties),选中Conditional复选框并保留Suspend when 'true'选项

    然后粘贴如下内容:

    System.out.println("ClassName.methodName: " + parameter);
    return false;
    

    上下文自动完成工作(提示:sysout后跟Ctrl+space扩展为System.out.println()),您可以打印出当前线程名称和其他有用信息

    实际上,return false;行告诉Eclipse不要在这个断点上停止。因此,运行“条件”代码,Eclipse继续运行该代码

    我担心它会减慢代码的速度,但对于现代计算机来说,它在人类层面上是无法感知的

    注意:由于某种原因,当我在false之后键入分号时,Perforce插件想要签出当前文件。当然,你可以取消这个。如果你粘贴线条,它不会反应