调试过程中更改变量值
我们在调试过程中,可以通过更改原本的变量值,来让变量满足要求,从而满足某个条件,看下最终条件的输出效果
比如下面的代码
import java.awt.image.ImageProducer;
import java.util.HashMap;
import java.util.Map;
public class test_aa {
// 私有构造函数,防止外部实例化
private test_aa() {
throw new AssertionError("This class should not be instantiated");
}
// 静态常量
public static double PI;
public static String name = "hello";
public static HashMap<String, Integer> map = new HashMap<>();
}
class Test {
public static void main(String[] args) {
test_aa.map.put("a", 1);
test_aa.map.put("b", 2);
double a= test_aa.PI;
if (a == 3.14) {
System.out.println("ok");
}
for (Map.Entry<String, Integer> entry : test_aa.map.entrySet()) {
if (entry.getKey().equals("a") || entry.getValue()==3) {
System.out.println(entry.getValue());
}
}
}
}
修改普通常量
点击debug调试,走到变量a这里,发现a不满足等于3.14的条件,但是我们还是想走这个for循环,就可以通过点击变量中set value按钮进行值的设置
修改之后,if可以进入,正常输出ok
修改map类型值
继续往下走,进入到map类型的判断语句,发现当前key为a时,value=1,不符合条件。想故技重施修改为value为3,发现使用set value是无法修改成功的
这是因为要修改map中某个键对应的值,你不能直接在“Variables”窗口中双击值进行修改,因为这通常用于基本类型和字符串。对于Map
,你需要直接在“ Watches ”窗口或者“Evaluate Expression”(评估表达式)窗口中输入命令来修改。
比如,如果你的Map名为map
,你想修改键为"name"的值,可以在这些窗口中输入:map.put("name", "new_value")
,然后执行这个表达式。
- 以评估表达式窗口为例:
执行后,a的value就变成了3,可以正常运行到if中
- Watches 窗口的方式