原文發表于公眾號:濤歌依舊(掃描二維碼,關注公眾號,免費領資料)

1947年9月9日,九九艷陽天,計算機歷史上的第一個bug誕生了,我們之前在古今計算機發展簡史(鏈接)中進行了比較詳細的介紹,對于程式員來說,寫bug、查bug、殺bug,都是司空見慣的事情,
我博客和公眾號的關注者中,有不少是大學生朋友,經常有人給我發一段程式,讓我幫找bug在哪里,非作業日且有空的話,我一般會回復:打log除錯,僅舉三例來看看:
大學生1:

大學生2:

大學生3:

有時候,問題確實比較簡單,甚至一眼就可以看出來,但我也不會去直接指出來,授人以魚不如授人以漁,我更希望他能自己除錯出來,并有所進步,比如:
![]()
所以,就有了這篇文章,下次再有大學生朋友讓你我幫找bug,就把這篇文章給他,順便說一下,雖然大學生嘴里說大佬,但始終愧不敢當,我有自知之明,跟真正的大佬比,還差得遠,
程式除錯,是一個極為重要的能力,程式員,寫出bug,也基本是見怪不怪了,在不同的場景下,需要用不同的方法來查殺bug.
在實際作業中,經常要用十八般武藝,綜合使用或嘗試多種方法,才能有效解決問題,客觀來說,我自己查殺bug的經驗和方法,應該還是比較豐富的,印象最深的是查出了一個linux系統的bug, 后來linux原始碼更新并發布新版本后,這個bug得到了解決,

然而,對于多數剛學程式的大學生來說,只需要掌握一招簡單的方法,就可以搞定幾乎所有的問題,方法就是: 打log除錯,
我以之前收到的一段代碼的簡化示例版為例(原程式稍復雜一點):
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b = 2;
int c = 3;
int *p = 0;
*p = 0;
int d = a + b + c;
cout << d << endl;
return 0;
}
那位大學生的問題是:為什么沒有輸出d的值,想知道錯在哪里?
其實,如果運行這段程式,會有資訊提示錯在哪一行! 我現在假設他不知道怎么看提示資訊,那該如何查問題在哪里呢?答案是:打log除錯,如下:
#include <iostream>
using namespace std;
int main()
{
cout << "xxx1" << endl;
int a = 1;
cout << "xxx2" << endl;
int b = 2;
cout << "xxx3" << endl;
int c = 3;
cout << "xxx4" << endl;
int *p = 0;
cout << "xxx5" << endl;
*p = 0;
cout << "xxx6" << endl;
int d = a + b + c;
cout << "xxx7" << endl;
cout << d << endl;
cout << "xxx8" << endl;
return 0;
}
輸出結果是:
xxx1
xxx2
xxx3
xxx4
xxx5
這就奇怪了,有xxx5, 但沒有xxx6, 所以錯誤必然是*p=0這里,這樣就找到問題所在了,
總之,對于新手而言,打log除錯,查看每一步,是最簡單最可行的方法,如果這種方法還解決不了,我再看看是啥變異了的bug.
這篇文章很簡單,不值一提,希望對大學生朋友有益,周五了,祝圣誕快樂,周末快樂,早休息!
CSDN認證博客專家
CSDN排名第一
點鏈接學人工智能
公眾號免費領資料
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252070.html
標籤:AI
上一篇:5G odds
