調試之前首先要保證我們的腦袋是清晰的,我們調試的過程主要是看代碼有沒有按照我們的想法去運行
調試最常使用的幾個快捷鍵
F5
啟動調試,經常用來直接跳到下一個斷點處(F5通常和F9配合使用,打了斷點按F5程序可以直接運行到斷點處,這樣提高了調試效率)
F9
創建斷點和取消斷點(可以在程序的任意位置設置斷點,這樣可以讓程序在隨意的位置停止執行,繼而一步步執行下去)
按F5后直接運行到17行(這樣就不用手動讓for循環一次次走完了)
(可以在調試框監視你想看的變量)
中間帶加號的是條件斷點,可以右擊鼠標進行設置條件,只有滿足條件才運行到這個斷點
F10
逐過程,通常用來處理一個過程,這個過程可以是一次函數調用或者是一條語句。
F11
逐語句,即每次執行一條語句,但是這個快捷鍵可以使我們的執行邏輯進入函數的內部(這是最常用的)
F10和F11有區別,F11可以進到Add函數內部(但是現在的編譯器一般不支持調試庫函數),F10不會,所以F11更加細致
Ctrl+F5
直接執行不調試
自動窗口會自動把程序的變量信息顯示
監視窗口可以打開多個
a,4可以看到4個元素
a,10可以看見10個元素
還可以查看內存
調試可以看函數堆棧,反匯編,寄存器等
調試練習:
這段代碼是死循環,通過調試的方法發現問題
已經越界訪問了,但是可以改arr[10]的值,hehe也正常打印
但是改完arr[12]后,i又會變回0,這樣子循環往復,變成死循環
i在變的時候arr[12]也在變,并且值變化相同,說明他們在同一塊空間上
vs arr和i之間是兩個空間,但是不同的編譯器可能不同
用assert要包含頭文件
實例理解:
要學會寫優秀的代碼
str只是提供元素的內容,不需要被改變,用const修飾能讓代碼更加健壯
避免傳過來的是空指針可以加上assert進行判斷
鏈接性錯誤可以通過查找(Ctrl+F)發現錯誤
運行時錯誤是編譯和鏈接都沒問題,但是結果有問題或者其他情況,這個要通過調試解決問題