日志的查看:
开发环境调试:直接看控制台打印的日志
线上:在管理控制台查看日志,根据日期找到目标日志文件,搜索url定位错误信息
IDEA断点的使用:
快捷键:
横 1:从其他界面回到当前断点界面光标处。
横 2:从断点处开始,逐行执行代码,如果遇到方法,直接跳过。
横 3:从断点处开始,逐行执行代码,如果遇到方法,会进入方法,但是只能进入自定义方法
,不会进入官方类库的方法。
横 4:从断点处开始,逐行执行代码,如果遇到方法,会进入方法,适用于所有方法
。
横 5:从当前断点处回退,回到方法的调用处
。
横 6:回退断点,回到上一个断点处,与横 5 的区别在于,它会回到上一个方法的断点
中,而横 5 只会回到上一个方法的调用处,并不会进入方法。
横 7:回到断点光标处,与横 1 的区别在于,它会继续往后执行一行代码
。
横 8:计算表达式,在 debug 模式中,可以直接输入当前类中的任意一个方法,直接进行运算,输出结果。
竖 1:重新运行程序,进入 debug 模式。
竖 2:执行程序,但不是逐行执行,而是跳转到下一个断点处。
竖 3:暂停断点,这个基本用不到。
竖 4:终止程序的运行。
竖 5:显示所有断点。
竖 6:让所有断点失效
,debug 不再进入断点,要恢复断点,再次点击此按钮即可。
实例分析:
public String getProcessInstanceIdByOrgId(Object bill,Long orgId) {
RestResponse<String> result = bosActivitiFeign.getProcessInstanceIdByOrgId(bill,orgId);
if (!ApiCodeConstant.SUCCESS.equals(result.getCode())) {
throw new WchaoException(result.getMessage());
}
return result.getResult();
}
问题一:断点打在第二行,异常出在第二行代码内部,由于这行代码是调用的第三方jar包中的API,拿不到错误信息的message
内部运行代码如下:
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(billKey, map);
public Object invokeSuper(Object obj, Object[] args) throws Throwable {
try {
this.init();
FastClassInfo fci = this.fastClassInfo;
return fci.f2.invoke(fci.i2, obj, args);
} catch (InvocationTargetException var4) {
throw var4.getTargetException();
}
}
解决方法:将断点打在第四行抛异常的地方,去查看抛异常的信息中的errorMessage,发现是是由于变量找不到
总结:想要在运行的时候取到异常信息,可以在抛异常的代码处try-catch
调试完成后去掉try-catch,将异常抛出给调用方,由于这里是远程调用,这样才能支持将全局事务进行回滚(具体原理还需要进一步理解)
问题二:在远程服务内打的断点,在调用远程服务的代码处进入后,要将控制台切换到远程服务的程序中(程序不会自己切换),才能继续进行调试
如果在本服务中点击跳过当前断点,远程服务中当前断点代码处调用的服务的断点会失效