3

我有一个由数千个班级组成的大型项目。今天我发现对于某些输入,在启用断言的情况下运行时会计算出不同的结果。

由于断言本身不会引发 AssertionError (我已经在该错误上设置了断点),这意味着隐藏在代码中的某处是具有不需要的副作用的断言语句。问题是我不知道我的 >100 个断言中的哪一个导致了问题。

由于 assert 在 Java 中不是方法而是关键字,所以我不知道如何设置每次调用 assert 时都会命中的断点。

我发现的可能的解决方法:

  • 逐一注释掉断言并运行程序最终找到罪魁祸首。
  • 使用像eclEmma这样的代码覆盖工具运行我的测试用例,以过滤掉一些断言语句。
  • 仅对某些包启用断言以缩小可能是原因的断言的数量。
  • 进行搜索和替换(使用正则表达式)以通过实用方法替换断言,我可以在其中放置断点。

尽管如此,我想知道是否有人知道打破断言的方法,即使条件评估为真。

4

1 回答 1

6

Goto Run->Add Java Exception Breakpoint Type 'AssertionError' in search box 选择 java.lang.AssertionError 和 OK

现在 Eclipse 将暂停断言

于 2014-09-02T20:44:31.380 回答