使用IDEA进行代码调试

日志的查看:

开发环境调试:直接看控制台打印的日志
线上:在管理控制台查看日志,根据日期找到目标日志文件,搜索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,将异常抛出给调用方,由于这里是远程调用,这样才能支持将全局事务进行回滚(具体原理还需要进一步理解)

问题二:在远程服务内打的断点,在调用远程服务的代码处进入后,要将控制台切换到远程服务的程序中(程序不会自己切换),才能继续进行调试
如果在本服务中点击跳过当前断点,远程服务中当前断点代码处调用的服务的断点会失效

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值