目錄

什么是Bug
什么是調試
Debug與Release的區別
如何調試
const的作用
作為準程序員,我們也敲了不少行代碼,曾幾何時,為了錯誤絞盡腦汁,為了bug哭天喊地。說到bug,背后有什么有趣的故事,如何規避bug呢??這篇文章讓你了解何為調試,如何調試,一起來看下去吧~
什么是Bugbug,英文意思為昆蟲或臭蟲,看名字就知道人們對它有多深惡痛絕了。歷史上第一個bug是由一只飛蛾引起的(也算是雖死猶生,名流千古了哈哈)。在編程中就是指程序錯誤。
什么是調試調試英文名為debugging(或debug),又稱除錯,是發現和減少計算機程序或電子儀器設備中程序錯誤的過程。
對freshman來說,一個工程中80%的時間在敲代碼,20%的時間在調試;而對高手來說,20%敲代碼,80%調試。俗話說得好,一名優秀的程序員就是一名優秀的偵探,與bug斗智斗勇的過程就是調試。
Debug與Release的區別Debug 通常稱為調試版本,它包含調試信息,并且不作任何優化,便于程序員調試程序。
Release 稱為發布版本,它往往是進行了各種優化,使得程序在代碼大小和運行速度上都是最優的,以便用戶很好地用。
Debug和Release版本下代碼結果和反匯編等等都是不一樣的。
這里舉個小栗子,來看看編譯器是怎么區別對待Debug和Release的。
#define _CRT_SECURE_NO_WARNINGS
#includeint main()
{
int i = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 0; i<= 12; i++)
{
arr[i] = 0;
printf("hello world\n");
}
return 0;
} 

我們可以看見,如果是 debug 模式去編譯,程序的結果是死循環,程序崩潰了; 而如果是 release 模式去編譯,程序沒有死循環。這便是優化導致的結果。
在Debug環境下,代碼詳細運行過程如下:
調試時打開監視窗口,如下:




當 i 越界訪問到 arr [12] 時,本該和arr [10],arr [11] 一樣,將arr [12] 改為0,湊巧的是,i 的地址和arr [12] 的地址是同一空間,arr [12]里放的數組就恰好等于 i 的值,都是12,在arr [12] 被改為0時,i 的值也變為0,然后0<= 12,滿足循環條件,每當 i = 12后就會被改為0,這樣?i 永遠到達不了13,程序也就陷入了死循環。
這確實是巧合,但又確實存在,可這又是為什么呢?這里我們通過畫圖的方式來解釋:

該代碼僅在VS2019 X86 的環境下使用,其他情況不一定,不用在此糾結,給出這個例子是想告訴我們調試的重要性,摸不著頭腦時調試可以有效解決問題哦~
如何調試1.環境準備:
將編譯器切換到Debug版本下,Release版本不可調試。
2.快捷鍵:
F5 :啟動調試,經常用來直接跳到下一個斷點處。
F9 :創建斷點和取消斷點
F10 :逐過程,不可進入函數
F11 :逐語句,每次都執行一條語句,可以進入函數內部
CTRL + F5 :開始執行不調試
以上就是最常用的快捷鍵啦,當然還有許多許多,可以看看這個博主的VS中常見的快捷鍵,總結的很詳細哦~
3.查看信息:
注意注意注意,以下查看都是在已經開始調試的條件下才有的,沒有調試看不見!!!
常見的 coding 技巧: 1. 使用 assert; 2. 盡量使用 const; 3. 養成良好的編碼風格; 4. 添加必要的注釋; 5. 避免編碼的陷阱。 const的作用①臨時變量:調試——窗口——監視——任選其一
如果選了監視底下的自動窗口,編譯器會自動識別程序的臨時變量并監視,雖然很方便,但不一定是我們想要監視的量,比如進入函數后函數外的臨時變量就沒辦法監視了,有一定的局限性,不建議使用。
②內存:調試——窗口——內存——任選其一
③堆棧:調試——窗口——調用堆棧
調用堆棧可以清晰的反應函數的調用關系以及當前調用所處的位置
④反匯編:法一:鼠標右鍵——轉到反匯編
法二:調試——窗口——反匯編
寄存器:調試——窗口——寄存器
const *p? ?and? * const p 1. const如果放在 * 的左邊,修飾的是指針指向的內容,保證指針指向的內容不能通過指針來改變。但是指針變量本身的內容可變。 2. const如果放在 * 的右邊,修飾的是指針變量本身,保證了指針變量的內容不能修改,但是指針指向的內容,可以通過指針改變。
int main()
{
int a = 10;
int b = 20;
int* const p = &a;
*p = &b;//ok
p = 20;//err
const int *p = &a;
*p = &b;//err
p = 20;//ok
return 0;
}常見錯誤:編譯型錯誤,鏈接型錯誤,運行時錯誤
面對Bug,我們要做的就是做一個有心人,積累排錯經驗。代碼會越寫越熟練,我們找錯的能力也會越來越高,Bug不是絆腳石,而是成長的必經之路。相信在若干年后,我們會感謝曾經寫過的Bug(強行煽情了屬于是,我才不感謝呢(bushi? ),繼續和它們斗智斗勇吧!!
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
分享文章:【C語言】實用調試技巧-創新互聯
URL標題:http://www.yijiale78.com/article22/pscjc.html
成都網站建設公司_創新互聯,為您提供全網營銷推廣、品牌網站制作、動態網站、企業網站制作、定制網站、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯