浅谈工作/学习中找bug的思路_0
文章目录
调试、try-catch-以及打印报错信息和百度的方法
前言
实际工作场景
一个方法,被多个Action调用都正常,但是被其中一个Action调用的时候就报错了
一个方法,被多个Action调用,其中一个Action调用的时候就报错了
这个问题也是困扰了我差不多一整天
基本上快绝望了,也没找到问题的原因
有时候吧,思路比什么都重要,一定要知道该从哪里去找原因,这样才能快速定位问题,从而解决问题
如果方向都没有,一个项目上万行代码,那不是大海捞针吗,所以我写这篇文章,一来是告诉自己,提醒自己
一些问题的解决思路,二来也是希望能够对看到这篇文章的同学有所帮助
描述
把这个取派员的分页查询功能,
移植到区域设置
但是移植(复制粘贴相关代码)之后并没有效果,我找了一整天都没找到原因
解决办法
最简单直接的办法就是去看完整的已经可以执行该功能的完整代码,包括三层的各个层次递进,当然也包括model,
并不是说我在Action调用的是同一个方法就行了
那其它地方你们是不是一样呢?
要知道,在工作中这种问题解决不了,给老板的印象是非常不好的!!!
为什么A项目已经有在这个功能了,同样的数据库,同样的框架,重要的还是完全同一套代码,我让你在B项目把这个功能加上来你都加不了呢?真的说不过去,后果是什么,咳咳……,轻则否定你的能力,不会被重用,重则步入提桶哥的后尘,去厂里忽悠小姐姐
我们怎么回怼是吧,根本没办法,确实没理亏
所以我们必须要解决,其实也不难,代码看懂了很容易(不用全部看懂,大概看懂就行)
切记最简单的办法就是:去看完整的已经可以执行该功能的完整代码,包括三层的各个层次递进,当然也包括model
解决思路1 —— 检查移植的代码,细枝末节也不要忽略,要整体上保持一致
首先我们看取派员的分页查询是怎么实现的,jsp页面我就不说了,直接复制,然后改改就行了,这个没什么特别要注意的
主要是看Action
那么我们区域设置的Region也是一样的操作
为什么不行呢,我们需要逐步排查
比如service层、然后在往上
dao层,然后再 往上 base层
再往上,model,这个非常容易漏掉
我们对比他们之间的不同
比如model
一定要善于去发现,那么如果他们保持一致会不会就行了,我们试着把model里面这个构造函数去掉
去掉之后Action报错了,这是意料之中的,我们有什么办法,使之不用去调用我们删掉的那个有参构造函数呢
不用去调用我们删掉的那个有参构造函数的办法很多,之我之前会这么写,可能是跟我之前学习C#留下的坏习惯有关吧,
我居然喜欢这样去给对象赋值,my god!这样赋值是不规范的,很容易引起问题,一定不要这样去赋值(除非真的没有办法了!!!)
我们改成规范的赋值写法就不需要这个有参构造函数了,如下
这样就对了,直接new出来,然后再逐步通过set赋值
然后就行了
解决思路2——,调试和百度,会怎么找到问题所在和怎么百度以及怎么解决问题
还是刚刚那个问题,我们换一种思路,重新来
1、先调试,定位到可能出错的代码段,try-catch起来,找报错信息,当程序功能没有实现时,我们确认是有问题了
但是又不知道问题出在哪
千万别光看服务器(这里是Tomcat)没有问题就行,Tomcat启动了只能说明服务没有问题
把错误信息打印出来(非常重要)
去检索这段报错信息,检索报错1信息也是有技巧的,要检索关键的地方
hibernate3.HibernateSystemException: No default constructor for entity: com.gyf.bos.model.Region
经过各路大神入的坑和记得笔记,我们思路就有了,那就加个无参构造函数试试
重启看看
这不就成了
总结
1、要学会移植代码,只要懂大概,而且每层不要漏掉任何一个细节
2、要学会如何百度解决问题,,这个非常重要