进阶系列-程序小白如何快速变老手(如何debug快速定位问题)

目录

缘起

开始

进阶

最后


缘起

作为程序员老鸟,对刚入门或技术能力还不突出的新进程序员,苦口婆心的劝解多看面试题,多关注技术前沿,多做项目都是没有用的,技术能力都是累积的过程,不可能通过这些基础的操作就可以进阶到资深程序员。于是,很多公司的大牛就会说,你要多做项目,多去项目中历练,确实,从长远看,从项目中提升可用的技术能力,确是可行,可是时间太长,过程太郁闷。

想快速进阶只需要掌握一项技能,就是DEBUG,可能很多程序员都会嗤之以鼻,DEBUG不是程序员必备的技能吗,这还需要怎样掌握?好吧,今天我就作为一个老程序员,说一说这DEBUG不是简单意义的打个断点,执行到这一步,出错跳出执行了,之后找到老程序员说:“哥,代码跑到这里就结束了,帮我看看呗,谢谢”,苦哈哈等老哥时间,好的立马帮解决,更好的不仅帮解决还会告诉你原因或原理,差的就是丢一句,“空指针呀”,“查不到数据呀”,“转换错误呀”。好不郁闷,那么,作为程序员老鸟,深入解说下如何DEBUG,怎么抓“虫子”,前提是ERROR日志中不是只记录message,还要记录异常堆栈,定位到行后就DEBUG走起。


开始

  1. 选择一个好的IDE是编程开发起始,当然,建议用正版软件,如果不想花钱可以用社区版(也可以破解版),当然,开发JAVA代码比较好用的IDE:IDEA,ECLIPSE,NETBEANS,JDEVELOPER。这些都是不错的IDE,大多会反编译jar可以看到class中的执行步骤,如果看不到jar包的反编译文件,可以找一下插件(特别是ECLIPSE是不含插件的,需要自己安装)。推荐用IDEA,使用上确实比ECLIPSE好,不过很多大公司还是用ECLIPSE,毕竟不要钱呀,
  2. 开发的源代码处打上断点,开始执行代码。
  3. 特别说明,断点不仅能打在自己开发的源码上,还可以打到jar反编译class的代码上,很多新进程序员忽略了此功能。

进阶

为了更好介绍DEBUG的过程,特意找了一个比较复杂的问题,来详细介绍。

这个问题是一个项目中真实的异常,是通过java调用.net webservice的接口调用问题,问题是java调用A接口url后,再调用B接口url就会出现调用异常,但重启应用后再调用B接口url又是正常的,而且通过Junit单元测试,单独调用B接口url又是正常的。

先期分析该问题,貌似中间调用环节出现了问题,当然,老鸟遇到这样的问题,也是启动应用,打上断点,开始debug,详细过程描述如下:

  1. 问题现象再现,为了再现此问题,启动应用,debug走起。

  2. 而且这部分是通过beanutils的反射机制唤起的调用,怎么办呢?老鸟就会找到调用的实际jar包,打上断点,逐步进去,也可以点击进入方法找到最底层调用。

  3. 合理怀疑,可能的问题点,debug模式不是只看输入、输出,还要看具体出现异常的底层代码,当然,如果是Null,index :0这样的异常,就不用深入了,只有debug异常出现的点就可以找到问题,不过新人很没有耐性,一步一步代码执行,总会跑到对应的方法可能就会直接F8,实际上问题可能就出现跳过的行上。

    以上这个问题,debug到这里,只能深入到jar中的代码了,由于是Webservice调用,所有的调用代码基本上都在java的rt.jar包下,没有办法,只能从调用开始地方直接深入到调用端,要有耐性,深入到每一次直接跳出的代码行,找到实际的异常代码(这个问题的复杂在于采用的反射调用,抛出来的异常已经被转化为异常message,堆栈是丢掉了,只能通过反编译的class找到实际调用代码,打上debug)。

  4. 通过多轮的异常进入,每次的跳出代码都定位到那行,如果是方法调用,就再深入到方法中打断点,找到最终的异常点。

  5. 异常信息不仅看当前的异常信息及堆栈,还可以看到目标异常的异常信息及堆栈,多看看,一定能找到有用的信息。

最后

DEBUG模式是很多新进程序员必须要熟练掌握,很多新进程序员碰到稍微深入代码的问题就感觉没有头绪,其实可以通过debug逐层进入代码中,一步一步调试,定位到对应代码行后,通过IDE的强大功能基本可以排除一些常见异常,比如Null,Index:0等,点击到对象上,IDE会显示对象的值,如果个是null那不就是空指针,如果列表没有值那不就数组越界,我总是对新进程序员说,我们是搞代码的,有源码也可以反编译源码,多debug就可以仔细些,找到问题行,就很容易找到问题,不急不燥,遇见问题先初步排除,不行在DEBUG,不要出现问题就DEBUG,比如Null,Index:0这样的异常,基本判断是需要的,通过异常堆栈,直接debug到那一行代码,检查对象内容,问题就迎刃而解了。希望新进程序员能快速掌握DEBUG开发,迅速进阶。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kete2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值