总结:Intellij IDEA使用Debug找出报错原因

一.了解Debug的基本操作

在这里插入图片描述
1.Show Execution Point (Alt + F10):如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。
2.Step Over (F8):步过,一行一行地往下走,如果这一行上有方法不会进入方法。
3. Step Into (F7):步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法
4. Force Step Into (Alt + Shift + F7):强制步入,能进入任何方法,一般查看源码用这个
5. Step Out (Shift + F8):步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。
6. Drop Frame (默认无):退回断点
7. Run to Cursor (Alt + F9):运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。
8. Evaluate Expression (Alt + F8):计算表达式,可以计算出选中表达式的值

在这里插入图片描述
1.Rerun ‘xxxx’(Ctrl + F5):(如Rerun ‘Tomcat8.5.24’)重新运行程序,会关闭服务后重新启动程序。
2.Update ‘xxxx’ application (Ctrl + F10):更新程序,一般在你的代码有改动后可执行这个功能。
3.Resume Program (F9):恢复程序,如果断点下面还有断点,按F9直接跳到下一个断点,如果没有,则直接运行完整个程序。
4.Pause Program:暂停程序,启用Debug。
5.Stop ‘xxx’ (Ctrl + F2):连续按两下,关闭程序。有时候你会发现关闭服务再启动时,报端口被占用,这是因为没完全关闭服务的原因,你就需要查杀所有JVM进程了。
6.View Breakpoints (Ctrl + Shift + F8):查看所有断点。
7.Mute Breakpoints:无效的断点,选择这个后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。如果只想使某一个断点失效,可以在断点上右键取消Enabled。

二.通过一个例子,使用Debug找出错误原因
以下是错误存在的代码:

import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class DataUtils {
    public static <T> List<T> getAll(Class<T> cla, ResultSet resultSet) {
        List<T> list = new ArrayList<>();

        try {
            //while循环遍历每一行数据
            while (resultSet.next()) {
                //生成一个实例,数据的一行对应着一个数据
                T t = cla.newInstance();
                //返回字段信息
                ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
                //获取列的数量
                int colums = resultSetMetaData.getColumnCount();
                //取出每一列的字段名
                for (int i = 1; i <= colums; i++) {
                    //获取字段别名
                    String lable = resultSetMetaData.getColumnLabel(i);
                    //取出每列对应的数据
                    Object obj = resultSet.getObject(i);
                    //获取属性的类型
                    Class<?> filedType = cla.getField(lable).getType();
                    //获取方法名
                    String setMethodName = "set" + lable.substring(0, 1).toUpperCase() + lable.substring(1);
                    //获取set方法
                    Method setMethod = cla.getMethod(setMethodName, filedType);
                    //给对应的属性设置值
                    setMethod.invoke(t, obj);
                }
                list.add(t);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
}

错误原因:
总结:Intellij IDEA使用Debug找出报错原因_第1张图片
错误位置:
总结:Intellij IDEA使用Debug找出报错原因_第2张图片
使用Evaluate Expression (Alt + F8),计算选中表达式的值,发现并没有找到值,所以错误就在获取属性这一步
总结:Intellij IDEA使用Debug找出报错原因_第3张图片
然后改正,程序能运行出结果后,再看下计算值是有结果的。
总结:Intellij IDEA使用Debug找出报错原因_第4张图片

你可能感兴趣的:(java,debug)