99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

【C語言】實用調試技巧-創新互聯

目錄

成都創新互聯公司-專業網站定制、快速模板網站建設、高性價比斗門網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式斗門網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋斗門地區。費用合理售后完善,十多年實體公司更值得信賴。

什么是Bug

什么是調試

Debug與Release的區別

如何調試

const的作用


作為準程序員,我們也敲了不少行代碼,曾幾何時,為了錯誤絞盡腦汁,為了bug哭天喊地。說到bug,背后有什么有趣的故事,如何規避bug呢??這篇文章讓你了解何為調試,如何調試,一起來看下去吧~

什么是Bug

bug,英文意思為昆蟲或臭蟲,看名字就知道人們對它有多深惡痛絕了。歷史上第一個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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設