優秀程序員必備素質——快速調試

你是否有過這些經歷:

1.代碼敲完了,剛想松口氣,一運行程序,滿滿的Bug

2.找啊找啊找,怎么找都找不到哪里出了問題。

3.調試了半天出不來,就開始便得心煩氣躁。

4.一天連一個Bug也沒調出來,工作效率低,心情抑郁。

5.想著有人可以告訴它如何改善現狀,提高工作效率

……

?

?? 如果你有些經歷,那么請接著往下看,雖然不能保證完全解決您現在所面臨的問題,但是也可以讓你工作起來輕松一些。

?

?? 對于我們調試效率低的這種情況,我們想要提高工作效率,就需要縮短調試的時間,即要快速調試,要想真正學會快速調試,我們需要做到以下四步驟:冷靜,學會看異常信息,分析異常,總結。

?

??第一步:保持冷靜

?? 這是我們調試時最為需要的,調整好心態是我們做好每一件事情的開端。

?

??錯誤的做法:一遇到Bug就心浮氣躁,覺得Bug很討厭,心煩,于是心不甘情不愿的開始了調試。

?

??正確的做法:先冷靜,然后想我們能夠遇到Bug就說明我們寫的代碼還不夠完美,還有可以改進的空間,還在我們的掌控范圍之內(不至于等產品發布后再出現Bug挨老板罵),這是好事兒,這樣想著想著我們的心情也就跟著好了,給我們調試帶來了好的開頭。

?

??第二步:學會看異常信息

?? 靜下心來后,我們就開始看程序給我們所拋出的異常,一般情況下,通過異常信息我們可以確定拋異常的位置和拋異常原因,比如我們以下面這個異常為例,這個是我們經常會碰到的異常,我們先來看異常信息:

?

?? 我們先看上面異常信息中的異常描述:“java.lang.NullPointerException”,空指針異常,說明是程序中某處出現了空指針導致的;

?

?? 接著我們看打印出異常的堆棧信息,有些或許看不懂沒關系,我們只看我們自己代碼部分即可,其中用紅色框標出的幾行代碼即為本次異常執行時所經過的幾個類和方法,在這里我們確定了是在根據用戶id查找用戶時出現的異常。

?

?? 注:程序打印的異常信息都是堆棧信息,即它的打印順序跟我們程序的執行順序是相反的,比如上面例子中的根據用戶id查找用戶方法,應該是先執行RoleManagerImp,然后是RoleDaoImpl,最后是BaseDao,可是打印順序確實BaseDao——RoleDaoImpl——RoleManagerImpl,要會看這些信息。

?

??第三步:分析異常

?? 該步驟是縮短調試時間的關鍵。確定了異常的幾個位置后(目前可能出現Bug的位置有四個,RoleManagerActionRoleManagerImplRoleDaoImplBaseDao都有可能),我們再來進一步分析Bug出現的原因和精確其所在位置。

?

?? 由于異常往往是在最后執行時才會拋出的,所以我們從后面Dao層入手,我們先查看BaseDaoget方法,可以發現其指定調用HibernateTemplate時有兩個參數:entityClassid,而RoleDaoImpl只傳進去了一個id,并且baseDaoentityClass沒有賦值,故而會有空指針。

?

?? 當然我們只是猜測,現在來驗證一下,在RoleDaoImpl中為baseDaoentityClass進行賦值:

public RolefindRoleById(Long roleId) {

baseDao.setEntityClass(Role.class);

returnbaseDao.get(roleId);

}

?? 再次執行,成功無異常,該Bug解決。

?

??第四步:總結

?? 這一步很重要,不僅對我們以后的調試效率會有大大的提高,而且還可以避免我們再次遇到類似的Bug,這就是所謂的項目經驗。

?

?? 我們對異常出現的情況進行分類匯總,一是在下次編碼的時候避免犯類似錯誤,二是讓我們遇到異常時可以不看異常信息就知道原因,比如針對上面的例子,一看報了空指針的異常,那么我們不看信息也可以確定不是roleId異常就是baseDao相關異常,進而再通過分析和測試進行排除。

?

?? 愚蠢的人是一遍又一遍地犯同樣的錯,而聰明的人則會通過總結和借鑒來避免犯類似的錯誤進而可以提高。

?

?? 上面這些步驟是我們平時積累的方法,“工欲善其事必先利其器”,一個好的方法才能幫助我們去更好的提高和成長。

?

?? 如果你積累的比較多之后可以回答一下下面這個問題,是一個面試題:一個網頁運行的很慢,如何快速地解決該問題?從哪些方面入手呢?大家踴躍發言哈!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451042.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java程序編譯運行過程

整體流程 1.首先由源程序文件編譯成class文件。注意這里的源程序并不僅限于java程序,其他語言如果能夠編譯成class文件,并且符合jvm規范也能夠在jvm上運行。 2.jvm將class文件拷貝到內存,解釋成相應的機器語言運行。我們常用的hotspot虛擬機…

【TeeChart .NET教程】(七)使用函數

2019獨角獸企業重金招聘Python工程師標準>>> 上一篇:【TeeChart .NET教程】(六)使用系列 【下載TeeChart.Net最新版本】 (一)功能類型 1.1 功能類型 TeeChart Pro功能是一個系列,幾乎可以是任何…

Django的簡介

一.MTV模型 Django的MTV模式: Model(模型):和數據庫相關的.負責業務對象與數據庫的對象(ORM) Template(,模板):放所有的HTML文件 模板語法:目的是將變量(數據庫內容)如何巧妙的鑲嵌到HTML頁面中 View(視圖):負責業務邏輯,并在適當的時候調用Model和Template 此外Django還有一個…

狗窩里的小日子- 3 ...

來,把平時作的菜菜整理下: 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.

5種流行的Linux發行版:你更喜歡哪一個呢?

現如今,對于各種類型的用戶(如桌面用戶、服務器管理員、圖形設計者等)而言Linux已經成為一種最流行的操作系統。Linux是免費且開源的,任何人都可以建立和編譯它的源代碼,并將它分發給別人。這就是為什么Linux會有很多個…

購物商城Web開發第二十三天

今天完成了結算頁的第二個頁面的編寫,買東西的完整流程已完成了頁面的部分 后面還差頁面的JS部分和后臺。 今天沒有遇到什么大的困難,有一個問題是CSS的float屬性的運用還是不夠好,今 天也意識到了一些會產生的問題,以后還需要多注…

java裝箱拆箱

所謂的拆箱裝箱,其實就是一個簡單的語法糖。我們以Integer為?。 (一)裝箱 Integer i 1; 本質上就是: Integer i Integer.valueOf(1); (二)拆箱 int m i; 本質上就是&…

基于ASP.net耳機網店商城系統(前臺頁面+后臺頁面)

源碼https://github.com/doublekai/user web文件夾 轉載于:https://www.cnblogs.com/doublekai/p/9778246.html

狗窩里的小日子- 4 ...

來,把平時作的菜菜整理下: 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.

硅谷觀察者眼中的亞洲

摘要:而印度團隊因為語言優勢,更多直接涉足在硅谷和全球的創業項目競爭中。去年,她花了大部分時間游歷了日本、韓國、中國、印度、新加坡和越南等國家,走訪了數百位亞洲的創業者和風險投資商。 即便是如此現場豐富且高度碎片化的亞…

[Web 前端] 解決因inline-block元素導致的空白間距和元素下沉

cp from : https://www.jianshu.com/p/617e78a27c88 ** 前言: ** CSS 中的 display:inline-block 是筆者最為喜歡的元素之一,可以將原本占據一行的塊級元素,轉變為可以并列顯示的行內塊級元素。 display:inline-block 常被用來代替float進行頁…

我的第一個隨筆

自我介紹 Hello!大家好破音,我叫單嘉隆,來自地理信息162,興趣愛好有 看電影(豆瓣已刷完,正在看imdb)怪物獵人世界!偶爾看看書 個人編程能力: 以前看網課大概寫了100來行p…

java8中LocalDate、LocalTime、LocalDateTime介紹

很久以前java8中就推出了新的Time API,旨在解決舊版Date和Calendar的缺陷。講道理真的挺好用的,不過由其他工具對新版time的兼容并不夠完善,導致現在使用還不夠普及。大家都還在用老的Date類,苦?的封裝時間工具函數,感…

狗窩里的小日子- 5 ...

來,把平時作的菜菜整理下: 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.

Linux(RadHat)基礎學習—FTP服務

RedHat下的ftp服務 1.ftp服務的啟動 1.編輯文件:vim /etc/sysconfig/selinux第6行selinuxdisabled保存退出。重啟主機。 2.安裝vsftpd yum install vsftpd -y 安裝完成: 開啟ftp服務: systmctl start vsftpd systemctl enable vsftpd 3.防火墻…

C++經典面試題匯總

1. 下面代碼輸出什么&#xff1f;為什么&#xff1f;&#xff08;初始化列表&#xff09; #include<iostream>using namespace std;class Test {int m_i;int m_j; public:Test(int v): m_j(v), m_i(m_j){}int getI(){return m_i;}int getJ(){return m_j;} };int main() {…

手機貼膜利潤超百倍 消費者為無用功能高價買單

摘要&#xff1a;市場研究機構IDC的最新報告預計&#xff0c;2013年智能手機出貨量將首次超過功能手機&#xff0c;國家工信部的數據顯示&#xff0c;截至2011年底&#xff0c;我國智能手機用戶已超過1.9億。記者調查發現&#xff0c;在從事手機貼膜的攤點上&#xff0c;攤主多…

java內存區域及靜態常量池、運行時常量池介紹

java內存區域介紹 我們先來介紹下虛擬機運行時數據區的結構&#xff1a; 我們項目中的每一個線程在運行時&#xff0c;都會有擁有自己獨立的棧數據和程序計數器。程序計數器可以看作字節碼命令的指示器&#xff0c;記錄了下個需要執行的字節碼指令&#xff0c;棧數據主要分為本…

狗窩里的小日子- 6 ...

來&#xff0c;把平時作的菜菜整理下&#xff1a; 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.

數據庫常見面試題總結

參考如下: 數據庫常見面試題(開發者篇) 數據庫優化 SQL數據庫面試題及答案 常見面試題整理--數據庫篇轉載于:https://www.cnblogs.com/threetop/p/9425172.html