是否可以设置断点,使程序在指令确定条件true后停止执行?
一个类有一个名为currency的变量,我希望创建一个断点,使程序在currency == 20之后的任何行停止。我不知道更改currency的行号,所以这就像在我们类ed的每一行中放置一个断点一样。currency被更改的地方。
有什么方法可以做到这一点(除了在每一行中添加一个断点)?
我正在使用NetBeans,但任何其他IDE中的解决方案都是受欢迎的。
发布于 2010-01-22 15:09:46
下面是关于在NetBeans:http://www.java-hair.com/?p=61中设置条件断点的链接
有关案文:
In NetBeans,创建一个断点,右键单击表示中断的粉红小方块。点击“自定义”。当出现自定义对话框时,选中“条件”并填写条件。上面是NetBeans中这个对话框的一个例子。
它们还包括Eclipse和JDeveloper。
编辑:作为对你的评论的回应-不,这不能按照你想要的方式来做。调试器设置断点的方式是在设置断点的指令中更改字节。在计算指令时,该字节的存在将控制传递给调试器,调试器将该字节替换为以前存在的任何字节。当恢复执行时,调试器将指令指针移动到设置断点的指令。
然后,单行上的条件断点很容易实现--当控制转移到调试器时,他只需检查条件,如果条件不是真,则自动恢复执行。
那么,如果不必将条件断点附加到行中,它将如何工作?它必须连接到每一行(正如您所猜测的那样,您需要这样做才能达到此效果)。我还没有这样做的必要,但我认为这是不可取的,因为它会大大减慢程序的执行速度。更好的方法可能是使用IDE在代码中搜索所有货币实例,以查看其设置位置,并在代码周围放置条件断点。
发布于 2010-01-22 17:45:10
改变你编写软件的方式。
而不是:
public class BreakEncapsulation {
private float currency = 0.0;
public BreakEncapsluation() {
this.currency += 5;
}
public void updateCurrency() {
this.currency = 20.0;
}
public void increaseCurrencyByRate() {
this.currency += 2;
}
public void decreaseCurrencyByRate() {
this.currency -= 2;
}
}这样做:
public class HonourEncapsulation {
private float currency;
public HonourEncapsluation() {
setCurrency( getCurrency() + 5 );
}
public void updateCurrency() {
setCurrency( 20.0 );
}
public void increaseCurrencyByRate() {
setCurrency( getCurrency() + getRate() );
}
public void decreaseCurrencyByRate() {
setCurrency( getCurrency() - getRate() );
}
public void setCurrency( float currency ) {
System.out.println( "Old currency = " + this.currency );
// Set the break point here. This is the only spot in the entire system
// where the value of currency changes. This idea follows the DRY
// principle: every piece of information should have exactly one
// occurrence.
//
this.currency = currency;
System.out.println( "New currency = " + this.currency );
}
private float getCurrency() { return this.currency; }
private float getRate() { return 2.0; }
}这不仅有助于维护您的代码(没有代码重复),而且还保持了一个充满可能性的世界。它可能无助于您当前的问题,但它将帮助您避免一些问题在未来。
这是一种称为封装的技术,与信息隐藏密切相关。
发布于 2010-01-22 16:40:59
这在Intellj和Eclipse以及其他类型的默认断点中都是可能的。此功能是IDE的函数,而不是JVM的函数。
https://stackoverflow.com/questions/2118128
复制相似问题