這里一定有你不知道的VS調試技巧

?

目錄

使用環境:Visual Studio 2022,如無特殊說明,都是在Debug、x64環境下編譯

一.什么是BUG

二.調試快捷鍵

F9:創建斷電或取消斷點

?條件斷點:滿足這個條件才觸發

?F5:啟動調試,經常?來直接跳到下?個斷點處,?般是和F9配合使?。

CTRL+F5:開始執?不調試,如果你想讓程序直接運?起來?不調試就可以直接使?。

?F10:逐過程,通常?來處理?個過程,?個過程可以是?次函數調?,或者是?條語句。

F11:逐語句,就是每次都執??條語句,但是這個快捷鍵可以使我們的執?邏輯進?函數內部。在函 數調?的地?,想進?函數觀察細節,必須使?F11,如果使?F10,直接完成函數調?。

?三.監視和內存觀察

3.1監視

特別注意:形參調用數組?編輯

?3.2內存

?四.Debug和Release

? 五.分析一個有意思的代碼

六.編程常?錯誤歸類

6.1編譯型錯誤

6.2鏈接型錯誤?

?編輯?6.3運?時錯誤


使用環境:Visual Studio 2022,如無特殊說明,都是在Debug、x64環境下編譯

一.什么是BUG

簡單的說就是因為各種原因,語法原因或運行成功,但結果有差異等。

二.調試快捷鍵

F9:創建斷電或取消斷點

斷點的作?是可以在程序的任意位置設置斷點,打上斷點就可以使得程序執?到想要的位置暫定執 ?,接下來我們就可以使?F10,F11這些快捷鍵,觀察代碼的執?細節。

?條件斷點:滿足這個條件才觸發

第一步:設置斷點后,鼠標右擊紅色斷電標記,點擊條件

第二步:根據需求,選擇條件輸入條件

已i==5為列:

按快捷鍵F5,效果:?

?F5:啟動調試,經常?來直接跳到下?個斷點處,?般是和F9配合使?。

CTRL+F5:開始執?不調試,如果你想讓程序直接運?起來?不調試就可以直接使?。

?F10:逐過程,通常?來處理?個過程,?個過程可以是?次函數調?,或者是?條語句。

F11:逐語句,就是每次都執??條語句,但是這個快捷鍵可以使我們的執?邏輯進?函數內部。在函 數調?的地?,想進?函數觀察細節,必須使?F11,如果使?F10,直接完成函數調?。

?VS更多快捷鍵了解:http://blog.csdn.net/mrlisky/article/details/72622009

?三.監視和內存觀察

3.1監視

監視調用方法:

隨后彈出:

在此添加想要觀察的變量名,數組名等

注意:變量在程序步驟中還未創建時,監視會有報錯不用急,只是因為程序還未執行到創建變量的步驟,根據需求按F10或者F11執行創建語句后就可觀察

特別注意:形參調用數組

可以看到,在main函數里時,數組可以看到所有元素,但是到了test1函數里時,觀察形參數組只能看到首位元素了。

再看,如果調用二維數組

arr2[3][5]; 三行五列的數組,也只能觀察到第一行數組.

其原因是:數組的傳參是,傳的數組首元素的地址,還和編譯器有關

想要看到,除首元素外的其他元素,其實只需要,特定的輸出方式

輸入格式是:

數組名,元素個數(二維數組也可以理解為行數)

列:

arr1,10

arr2,3

?3.2內存

步驟:

內存更加方便我們觀察數據,更利于對代碼后面執行內存的理解

?四.Debug和Release

在VS上編寫代碼的時候,就能看到有 debug 和 release 兩個選項,分別是什么意思呢?

Debug通常稱為調試版本,它包含調試信息,并且不作任何優化,便于程序員調試程序; 程序員在寫代碼的時候,需要經常性的調試代碼,就將這?設置為 debug ,這樣編譯產?的是 debug版本的可執?程序,其中包含調試信息,是可以直接調試的。

Release 稱為發布版本,它往往是進?了各種優化,使得程序在代碼??和運?速度上都是最優的, 以便??很好地使?。當程序員寫完代碼,測試再對程序進?測試,直到程序的質量符合交付給?? 使?的標準,這個時候就會設置為 release ,編譯產?的就是 release 版本的可執?程序,這個 版本是??使?的,?需包含調試信息等。?

?對比:

對?可以看到從同?段代碼,編譯?成的可執??件的??,release版本明顯要?,?debug版本明 顯?。編譯器對Release版本,進行了優化處理

? 五.分析一個有意思的代碼

此代碼,需要特定的環境:

在VS2022、X86、Debug的環境下,編譯器不做任何優化的話,下?代碼執?的結果是啥?

 #include <stdio.h>int main(){int i = 0;int arr[10] = {0};for(i=0; i<=12; i++){arr[i] = 0;printf("hehe\n");}return 0;}

看代碼先給出你的答案!!!!!

看代碼先給出你的答案!!!!!

看代碼先給出你的答案!!!!!

看代碼先給出你的答案!!!!!

看代碼先給出你的答案!!!!!

看代碼先給出你的答案!!!!!

相信大家大部分人可能都是覺得,只是越界訪問。

那么我們看運行效果:

哎!居然沒有警告,而且在無限次的打印代碼,當時我看到這個結果引起了我強烈的好奇心

這?肯定有疑問:為什么i和arr 數組之間恰好空出來2個整型的空間呢?這?確實是巧合,在不同的編譯器下可能中間的空出的空間??是不 ?樣的,代碼中這些變量內存的分配 和地址分配是編譯器指定的,所以的 不同的編譯器之間就有差異了。所以 這個題?是和環境相關的。

從這個理解我們能夠體會到調試的重要性,只有調試才能觀察到程序內部執?的細節,就像醫?給病 ?做B超,CT?樣。

?并且,有一個公司也出了這樣一個面試題:

?那么如果沒有了解相關知識,那么面試官肯定就不會在你試卷上想要的答案了!!!

六.編程常?錯誤歸類

6.1編譯型錯誤

編譯型錯誤?般都是語法錯誤,這類錯誤?般看錯誤信息就能找到?些蛛絲?跡的,雙擊錯誤信息也 能初步的跳轉到代碼錯誤的地?或者附近。編譯錯誤,隨著語?的熟練掌握,會越來越少,也容易解 決。

6.2鏈接型錯誤?

看錯誤提?信息,主要在代碼中找到錯誤信息中的標識符,然后定位問題所在。?般是因為

  • 標識符名不存在
  • 拼寫錯誤
  • 沒包含頭文件
  • 引用的庫不存在

?6.3運?時錯誤

運?時錯誤,是最恐怖的,明明可以運行成功,但有時候就不是你想要的效果。甚至定時出現,那可能就是在吃內存,內存沒了程序就崩掉了

你們的點贊、關注、收場是博主最大的動力!求三連

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20401.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20 - grace數據處理 - 地下水儲量計算過程分解 - 地下水儲量計算

20 - grace數據處理 - 地下水儲量計算過程分解 - 地下水儲量計算 0 引言1 地下水儲量變化計算過程0 引言 由水平衡方程可以將地下水儲量的計算過程分解為3個部分,第一部分計算陸地水儲量變化、第二部分計算地表水儲量變化、第三部分計算冰后回彈改正、第四部分計算地下水儲量變…

python爬蟲之JS逆向——網頁數據解析

目錄 一、正則 1 正則基礎 元字符 基本使用 通配符: . 字符集: [] 重復 位置 管道符和括號 轉義符 轉義功能 轉義元字符 2 正則進階 元字符組合(常用) 模式修正符 re模塊的方法 有名分組 compile編譯 二、bs4 1 四種對象 2 導航文檔樹 嵌套選擇 子節點、…

Vue:Bin Code Editor格式化JSON編輯器

最終效果如下圖所示&#xff0c; Bin Code Editor安裝 npm或yarn安裝命令如下&#xff0c; npm i bin-code-editor -S # or yarn add bin-code-editor 組件注冊 全局注冊 在 main.js 中寫入導入以下內容&#xff0c; import Vue from vue; import CodeEditor from bin-cod…

服務器數據恢復—異常斷電導致ESXi虛擬機無法啟動的數據恢復案例

服務器數據恢復環境&#xff1a; 某大廠PS4000服務器&#xff0c;服務器上部署VMware ESXi虛擬化平臺。 服務器故障&#xff1a; 機房斷電&#xff0c;重啟后服務器中的某臺虛擬機不能正常啟動。管理員查看虛擬機配置文件&#xff0c;發現無法啟動的虛擬機的配置文件除了磁盤文…

【每日刷題】Day53

【每日刷題】Day53 &#x1f955;個人主頁&#xff1a;開敲&#x1f349; &#x1f525;所屬專欄&#xff1a;每日刷題&#x1f34d; &#x1f33c;文章目錄&#x1f33c; 1. 1019. 鏈表中的下一個更大節點 - 力扣&#xff08;LeetCode&#xff09; 2. 116. 填充每個節點的下一…

Exce 兩列一組對齊呈現,缺失補 0

Excel 里有 多 組數據&#xff0c;每組 2 列&#xff0c;每組長度不同。第 1 列是編號&#xff0c;列之間的編號有重復。 ABCDEFGH1Mass10Mass11Mass12Mass132802200581309088146532802225938133306824779282975598142002482273148413154988335698822331305832720485110460842…

計算機考研|408 值得選擇嗎?有哪些優勢?

408當然非常值得報考&#xff0c;但是現在的408已經卷麻了&#xff01; 現在越來越多的學校改考408&#xff0c;光今年就有6所發布通知&#xff0c;宣布改考408&#xff0c;分別是&#xff1a; 這對考408的學生肯定是好消息&#xff0c;后面可能還會有學校陸續改考&#xff0c;…

一、實現一個簡單的 Google Chrome 擴展程序

目錄 &#x1f9ed; 效果展示 # 圖示效果 a. 拓展程序列表圖示效果&#xff1a; b. 當前選項卡頁面右鍵效果&#xff1a; c. 拓展程序消息提示效果&#xff1a; &#x1f4c7; 項目目錄結構 # 說明 # 結構 # 文件一覽 ? 核心代碼 # manifest.json # background.j…

SLAM ORB-SLAM2(26)重定位過程

SLAM ORB-SLAM2(26)重定位過程 1. 前言2. 詞袋模型2.1. 加快搜索2.2. 在文本檢索的應用2.3. 引入視覺圖像分類3. 重定位總體過程3.1. 計算當前幀特征點的詞袋向量3.2. 根據用詞袋查找相似的候選關鍵幀3.3. 通過詞袋模型進行初步匹配3.4. 查詢較匹配的關鍵幀3.4.1. 通過PnP投影…

華為 2024 屆實習校園招聘-硬件通?/單板開發——第五套

華為 2024 屆實習校園招聘-硬件通?/單板開發——第五套 部分題目分享&#xff0c;完整版帶答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔細校正&#xff0c;僅供參考&#xff09;&#xff08;共十套&#xff0c;每套四十題選擇題&#xff09;獲取&#xff08;WX:…

java期末細節知識整理(一)

1.java程序的執行過程&#xff1a;先編譯后解釋。也就是我們在idea寫的文件叫做java源文件&#xff08;.java結尾的文件&#xff09;&#xff0c;經過編譯器會生成字節碼文件&#xff08;.class結尾的文件&#xff09;&#xff0c;再通過解釋器進行實現 2.棧用來存儲引用類型的…

易語言本地IP一鍵切換程序(附帶源碼)

易語言本地IP一鍵切換程序 效果圖部分源碼源碼領取下期更新預報 效果圖 部分源碼 .判斷開始 (單選框1.選中 &#xff1d; 真)標簽5.標題 &#xff1d; #換行符 &#xff0b; “正在切換IP.”.如果真 (運行 (“netsh interface ip set address ” &#xff0b; #引號 &#xff…

PHP火狼大灌籃游戲源碼微信+手機wap源碼帶控制

使用此接口可以實現支付寶、QQ錢包、微信支付與財付通的即時到賬&#xff0c;免簽約&#xff0c;無需企業認證。PHP易支付源碼&#xff0c;免簽約不需要企業的支付平臺源碼&#xff0c;彩虹第三四方在線支付系統源碼,易支付token合作者商戶申請源碼&#xff0c;app和網頁都可以…

ubuntu--Linux運行時格式

Linux運行時格式 \r 錯誤 用vim打開那個執行錯誤的 sh腳本文件 進入最后一行模式下 :set ff顯示 fileformatdos 解決方法 : :set ffunix查看是否更改 : :set ff結果 : 保存退出即可 :x運行, 沒有出錯 * Author: cpu_code * Date: 2020-07-29 19:07:52 * LastEditTime: 2020…

day25回溯算法part02| 216.組合總和III 17.電話號碼的字母組合

216.組合總和III 題目鏈接/文章講解 | 視頻講解 class Solution { public:vector<vector<int>> result;vector<int> path;int sum;void backtracking(int n, int k, int startindex) {// int sum accumulate(path.begin(), path.end(), 0);if (sum n &am…

HTTP --tcp

TCP TCP連接 tcp/ip是全球計算機以及網絡設備都在使用的一種常見的分組交換網絡分層協議集&#xff0c;客戶端可以打開一條tcp/ip連接&#xff0c;連接到可能運行在世界各地的服務器應用程序&#xff0c;一旦連接建立起來了&#xff0c;在客戶端和服務器的計算機之間交換的報…

@autowired 注入進來對象為null的幾種場景及解決辦法

一、原因 Autowired 注解用于自動注入 Spring 容器中管理的依賴對象。如果注入的對象為 null&#xff0c;可能是以下原因之一&#xff1a; 被注入的對象沒有被 Spring 容器管理&#xff0c;即沒有被 Spring 掃描到或者沒有配置相應的 。注入的對象在 Spring 容器中有多個實例…

el-date-picker的使用,及解決切換type時面板樣式錯亂問題

這里選擇器的類型可以選擇日月年和時間范圍&#xff0c;根據類型不同&#xff0c;el-date-picker的面板也展示不同&#xff0c;但是會出現el-date-picker錯位&#xff0c;或者面板位置和層級等問題。 源代碼&#xff1a; <el-selectv-model"dateType"placeholder&…

BOOST_SREATCH

BOOST Boost是一個由C社區開發的開源庫&#xff0c;為C語言標準庫提供擴展。這個庫由C標準委員會庫工作組成員發起&#xff0c;旨在提供大量功能和工具&#xff0c;幫助C開發者更高效地編寫代碼。Boost庫強調跨平臺性和對標準C的遵循&#xff0c;因此與編寫平臺無關&#xff0…

PyCharm設置前端:全面解析與個性化配置指南

PyCharm設置前端&#xff1a;全面解析與個性化配置指南 PyCharm&#xff0c;作為一款強大的Python集成開發環境&#xff08;IDE&#xff09;&#xff0c;在編程界享有極高的聲譽。然而&#xff0c;對于許多前端開發者來說&#xff0c;如何在PyCharm中設置和優化前端工作環境可…