注意:实际上,我会发布一个答案,但欢迎任何其他建议!
这个问题需要一些背景信息,以防止评论质疑我的目标...... :-)
在我工作的地方,我们使用了大量的调试,主要是用 Eclipse 完成的。我知道有些人质疑调试的做法,声称良好的设计和分析以及适当的单元测试可以很容易地剖析错误。
好吧,我在 Java 1.2(甚至 1.1)是最新版本时设计的遗留应用程序的大型代码库(Java / Swing)上工作,并且代码有很多麻烦,即使经过多年的工作,我不能假装知道超过10%!我们拥有的 JUnit 测试最多只能覆盖 1% 的代码(这是最近的实践……)。
因此,使用好的调试器对于检查类、其中的数据、软件的行为以及我们提供的数据类型等非常重要。
然而,逐步有其局限性:它可能很慢,我们可能会遗漏一些东西,并且在某些情况下是不切实际的,例如查看 paint() 方法或使用多线程部分。
所以我习惯了,在这些困难的情况下,System.out.println()
到处散布一些语句,看看调用了什么方法,使用什么参数,以什么顺序等。我可以使用日志,但这种方式更简单,并且问题解决后,我删除了这些行。
这种做法的一个问题是我们必须在提交之前仔细检查差异以消除这些行。另一个问题是我们使用 Perforce 作为 VCS,这很好,但需要显式检出文件(将其状态从只读更改为可写)以添加此类跟踪。它很慢(使用 Eclipse P4 插件)并且很麻烦。
所以,我的问题是:是否可以在不更改源代码本身的情况下将上下文跟踪添加到某些代码点?每次运行一行时都可以记录“我在这里,我看到了”的东西。
我最初搜索了一个 Eclipse 插件,只找到了一个 C 调试器的建议,并找到了(我认为在 SO 中的评论中,但我失去了参考,唉)我将在下面发布一个解决方案,希望它可以对其他人有用。如上所述,任何替代方案都可以采用。