[编辑:让我改一下]
假设调试中出现的对象o
具有属性a
和b
,其值为null
和Hello
。是否可以为下一个调试会话自动生成以下代码:
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
}
所以基本上我试图通过识别传递给函数的对象来识别有趣的情况。我知道这些值,因为我通常在其他代码中引发的异常上有一个断点。所以我的问题是:不是编写所有这些丑陋的代码来生成一个合适的断点,有没有办法根据变量在以前的调试会话中具有的某些值来配置条件断点?基本上说:当物体与此处的物体完全相同时停在这里?
答案 0 :(得分:3)
您可以执行以下操作:编写一个静态实用程序方法(“writer”),用于序列化并写入要与将来的调试会话进行比较的对象;和另一个方法(“读者”)接收一个对象并将其与序列化版本进行比较,当两者相等时返回true 之后,您可以定义一个或多个调用“writer”方法并且不会停止的条件断点 此外,您还要定义另一个调用“reader”方法的条件断点,该方法像往常一样停止线程,但仅在满足条件时停止。
答案 1 :(得分:2)
Netbeans提供条件断点功能:在行上设置断点后,右键单击它,选择Breakpoint-Properties,选择Condition复选框并插入Java代码以表示必须为true才能中断程序执行的条件。
答案 2 :(得分:0)
添加断点,右键单击它,转到断点 - >性能 在断点属性窗口中,您将看到一个条件框,然后添加if