本帖最后由 大山哥哥 于 2018-7-31 11:29 编辑
之前关于debug的方式写了3篇帖子,简述了6种工作中常用的debug方式,今天补充一些小技巧(针对Eclipse|MyEclipse|STS,idea还没有搞明白)。
一、条件debug(应用场景:满足某种条件才会触发断点,一般是条件判断时)
比如只有当id是12306时记录会有问题,那就当id等于12306时才触发断点,其他都放过。具体操作如下图:
选择"Breakpoint Properties..."后,弹出如下弹出框:
根据自己的条件按照上图设置即可。
参考代码:
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if(i==80){//断点行,设置断点属性
System.out.println("nihaowoshi: "+i);
}else{
System.out.println("sorry"+i);
}
}
}
二、异常断点(应用场景:知道抛出的异常是什么,但是不知道位置在哪,帮助查找异常抛出位置) 比如已知程序抛出“java.lang.ArithmeticException”异常。
打开“debug”视图,设置异常断点,操作具体,如下图:
参考代码如下:
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
System.out.println("no problem");
try {
int j = i/0;//异常行
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
System.out.println("have problem");
}
三、单步过滤(应用场景:当使用debug时,F5走到下一行代码,有时候会走到jar包中类的方法中,“单步过滤”就是跳过这些我们想忽略的方法直接到目标方法内部的一种debug技巧)
具体使用场景参考下图:
具体操作:
1.设置单步过滤条件,过滤的包或类
Window-->Preferences-->Java-->Debug-->Step Filtering 具体设置如下图:
2.debug时,设置“单步过滤”生效
参考代码:
[AppleScript] 纯文本查看 复制代码
public static void main(String[] args) {
String str = "abcdefghijklmnopqrstuvwxyz";
String upcase = toUpcase(str.substring(0, 3));
System.out.println(upcase);
}
public static String toUpcase(String param){
String upperCase = param.toUpperCase();
return upperCase;
} 四、跳到帧(应用场景:当想debug的代码行不小心跳过去的时候)
作用:在debug时,eclipse可以直接跳到调用栈中指定的任意帧(main方法中的帧除外),并且使JVM在此处重新运行。这使你可以重新运行你的部分代码,而不需要为了调试之前的代码而重新来一次
上述有个“调用栈”,“帧”的概念什么是调用栈呢?如下图:
操作:如果想回退,选择其中的“帧”,右键“drop to frame”即可。注意:main方法中的“帧”无效 参考代码:
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
String str = "abcdefghijklmnopqrstuvwxyz";
String upcase = toUpcase(str.substring(0, 3));
System.out.println(upcase);
}
public static String toUpcase(String param){
System.out.println("hello");
System.out.println("hi");
String upperCase = param.toLowerCase();
return upperCase;
}
eclipse debug的小技巧有很多,今天先总结这4条,剩下的一些小技巧下一篇在给大家详细描述,希望这些小技巧在以后的工作中能对大家有所帮助。
|