1

[编辑:让我改述一下]假设o在调试中出现的对象具有属性ab,具有值nullHello。是否可以为下一个调试会话自动生成以下代码:

if(o.a == null && o.b == "Hello") {
}

在调试一个必须处理复杂用户输入的程序时,例如编程语言的解析器,我经常想从解析过程中的某个点开始调试。当处理来自特定输入代码行的指令时,我实现了一种简单的启动方式。
但是,行可能包含非常复杂的指令,导致代码中的深度递归,因此在开始调试后,我必须手动深入程序。当这种情况发生在函数func(obj a)中时,我通常会写一些像这样的丑陋代码:

public void func(obj a) {
  if(a instanceof someClass && ((someClass)a).hasSomeProperty() && ((someClass)a).getIdentifier().equals("myID")) {
  // set a breakpoint here
  }
  // other code 
}

所以基本上我尝试通过识别传递给函数的对象来识别有趣的情况。我知道这些值,因为我通常在其他代码中引发的异常上设置断点。所以我的问题是:不是编写所有这些丑陋的代码来生成正确的断点,有没有办法根据变量在以前的调试会话中的某个值来配置条件断点?基本上说:当对象与此处的对象完全一样时,请在此处停止?

4

3 回答 3

3

您可以执行以下操作:编写一个静态实用程序方法(“writer”),序列化并写入您想要与未来调试会话进行比较的对象;另一个方法(“reader”)接收一个 Object 并将其与序列化版本进行比较,当两者相等时返回 true。
之后,您可以定义一个或多个条件断点,它们会调用“writer”方法并且不会停止。
此外,您将定义另一个调用“reader”方法的条件断点,该方法照常停止线程,但仅在满足条件时才停止。

于 2013-10-09T14:20:22.487 回答
2

Netbeans 提供条件断点功能:在一行上设置断点后,右键单击它,选择 Breakpoint-Properties,选中 Condition 复选框并插入 Java 代码来表达一个必须为真才能中断程序执行的条件。

于 2012-11-16T14:06:09.920 回答
0

添加断点,右键单击它,在断点属性窗口中转到断点 -> 属性,您将看到一个条件框,然后添加您的 if

于 2012-11-16T14:07:16.143 回答