一般项目中是如何调bug的 ------- 手把手带你体验整个流程
調(diào)bug流程
- 一、運(yùn)行代碼,發(fā)現(xiàn)錯(cuò)誤。
- 二、找到報(bào)錯(cuò)的位置。
- 三、如果注釋后運(yùn)行正常了,那么就是注釋掉的部分有誤了(這是最想看到的結(jié)果了);
- 四、于是就認(rèn)為應(yīng)該不是這里的鍋,那么我們將中main 函數(shù)里邊調(diào)用的開始下手。
- 五、一般編譯器都會(huì)有,查看定義,跳轉(zhuǎn)到定義的功能,這很大程度上能讓我們快速的找到bug。
- 六、同方法五類似,找到在這函數(shù)中調(diào)用函數(shù)的問題,或者是該函數(shù)本身的問題
- 七、最后的問題,集中到一個(gè) if 語句中了
- 八、因?yàn)槭俏募?#xff0c;我就試試是不是讀取到了東西 , 或者是文件沒有成功打開,
- 九、這次的分析就告一段落了,希望能幫到大家
例子只叫大家如何找到bug,不會(huì)將到太具體的bug的解決。因?yàn)閎ug太多,解決方法也很多。最重要的是找到bug。
下面以一個(gè)真實(shí)的案例來帶領(lǐng)大家來體驗(yàn)。
一、運(yùn)行代碼,發(fā)現(xiàn)錯(cuò)誤。
(在這一步,理解要報(bào)錯(cuò)的提示,一般編譯器都或多或少有點(diǎn)的,如果看不懂可以賦值粘貼到CSDN上看看是否有人也有同樣的報(bào)錯(cuò))
在這個(gè)報(bào)錯(cuò)中,我提取到了切入點(diǎn),(如上圖是畫紅線的部分)。
二、找到報(bào)錯(cuò)的位置。
首先看一下是否有明顯語法錯(cuò)誤,如果看不出。試一試把這個(gè)部分注釋掉看是否還會(huì)報(bào)錯(cuò)(關(guān)鍵)。
發(fā)現(xiàn)沒有明顯的錯(cuò)誤 , 于是我試著把它注釋掉,注意在注釋的時(shí)候不要自己弄出錯(cuò)誤。(即把與這個(gè)代碼相關(guān)的根著注釋掉,所以這里也體現(xiàn)了盡量將重復(fù)使用的代碼整合會(huì)一個(gè)函數(shù))。
與其想關(guān)聯(lián)的
三、如果注釋后運(yùn)行正常了,那么就是注釋掉的部分有誤了(這是最想看到的結(jié)果了);
如果沒有 , (如下圖,還是相同的錯(cuò)誤,我就感覺邪門了。。。) 于是將這個(gè)錯(cuò)誤賦值粘貼 ,搜索看看
搜索結(jié)果如下,如果找到相同的那就最好了,沒有的話。。。。(本博主就是沒有,臉干)
不過在這些類似的結(jié)果中好像都提到了new 。剛開始我以為了模板類寫錯(cuò)了(畢竟模板類難倒大半好漢呀)。于是將整個(gè)頭文件和對(duì)應(yīng)的cpp 給注釋了(后來發(fā)現(xiàn)這個(gè)思路不對(duì) , 不要學(xué)博主呀)
在注釋的時(shí)候人已經(jīng)煩了,最好還是睡了一會(huì)兒頭腦清醒了。 (⊙o⊙)… 聊正題。
四、于是就認(rèn)為應(yīng)該不是這里的鍋,那么我們將中main 函數(shù)里邊調(diào)用的開始下手。
首先全注釋掉 ,看還有沒有,還有就是編譯器的問題了。然后一個(gè)一個(gè)的解放出找到有問題的函數(shù)出來。
如上圖,在這樣操作之后,發(fā)現(xiàn)是 如下圖
五、一般編譯器都會(huì)有,查看定義,跳轉(zhuǎn)到定義的功能,這很大程度上能讓我們快速的找到bug。
(如下圖)
六、同方法五類似,找到在這函數(shù)中調(diào)用函數(shù)的問題,或者是該函數(shù)本身的問題
(在這里我是不是又提到了調(diào)用的函數(shù),因此將功能模塊化很利于我們調(diào)bug)
七、最后的問題,集中到一個(gè) if 語句中了
繼續(xù)
是里邊 兩條語句的問題 , 然后分析,肯定不會(huì)是單獨(dú)下面一個(gè)語句的錯(cuò),因?yàn)槿绻麤]有 申請(qǐng)空間就賦值肯定錯(cuò)的。而第一個(gè)語句又有new ,再聯(lián)想到前邊搜索的結(jié)果。我就想是不是new 的問題呢。
首先試了一下變成 malloc 。結(jié)果嘛,看一下這篇博客就知道不能這樣,還得用new 。為何不能用malloc
之后呢?我想了想,既然申請(qǐng)一個(gè)空間沒錯(cuò),那么就是申請(qǐng)完空間后,第二條語句賦值的時(shí)候錯(cuò)了。賦值(這語句是不是很簡單。。。),賦值的這個(gè)操作過程是沒問題的,那么 , 真相只有一個(gè) ,那就是 拿來賦值的 temp 有錯(cuò)。(最后發(fā)現(xiàn),還真是)
八、因?yàn)槭俏募?#xff0c;我就試試是不是讀取到了東西 , 或者是文件沒有成功打開,
好家伙不試不知道一試嚇一跳呀。竟然是文件打不開的錯(cuò)()服了。這也告訴了一個(gè)道理一定要接加一個(gè)檢查文件是否已經(jīng)打開的命令。
九、這次的分析就告一段落了,希望能幫到大家
總結(jié)
以上是生活随笔為你收集整理的一般项目中是如何调bug的 ------- 手把手带你体验整个流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机基本信息的获取
- 下一篇: 算法之------搜索篇