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