【C語言】6.C語言VS實用調試技巧(1)

文章目錄

  • 1.什么是 bug
  • 2.什么是調試(debug)?
  • 3.Debug 和 Release
  • 4.VS調試快捷鍵
    • 4.1 環境準備
    • 4.2 調試快捷鍵
  • 5.監視和內存觀察
    • 5.1 監視
    • 5.2 內存


1.什么是 bug

bug現在一般是指在電腦系統或程序中,隱藏著的一些未被發現的缺陷或問題,簡稱程序漏洞。


2.什么是調試(debug)?

當我們發現程序中存在的問題的時候,那下一步就是找到問題,并修復問題。

這個找問題的過程叫稱為調試,英文叫debug。調試一個程序,首先是承認出現了問題,然后通過各種手段去定位問題的位置,可能是逐過程的調試,也可能是隔離和屏蔽代碼的方式,找到問題所的位置,然后確定錯誤產生的原因,再修復代碼,重新測試。


3.Debug 和 Release

在這里插入圖片描述

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

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

在這里插入圖片描述在這里插入圖片描述
Debug 版本Release版本

對比可以看到從同一段代碼,編譯生成的可執行文件的大小,release版本明顯要小,而debug版本明顯大。


4.VS調試快捷鍵

4.1 環境準備

我們需要一個支持調試的開發環境,使用VS的時候應該把VS上設置為Debug。

在這里插入圖片描述


4.2 調試快捷鍵

調試最常使用的幾個快捷鍵:

  1. F9:創建斷點和取消斷點。斷點的作用是可以在程序的任意位置設置斷點,打上斷點就可以使得程序執行到想要的位置暫停執行,接下來我們就可以使用F10,F11這些快捷鍵,觀察代碼的執行細節。

  2. 條件斷點:滿足這個條件,才觸發斷點

在這里插入圖片描述

鼠標右擊斷點,點擊條件

在這里插入圖片描述

可以設置條件。

然后打開監視窗口:

在這里插入圖片描述

直接跳到滿足條件的地方了,這就是條件斷點。

  1. F5:啟動調試,經常用來直接跳到下一個斷點處(這個斷點指的是運行邏輯上的斷點,而不是物理上的斷點),一般是和F9配合使用。

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

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

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

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


5.監視和內存觀察

5.1 監視

調試的時候可以通過監視功能來查看自己的內部數據。

在這里插入圖片描述

在這里插入圖片描述


5.2 內存

如果監視窗口看的不夠仔細,也是可以觀察變量在內存中的存儲情況。

在這里插入圖片描述

輸入arr

在這里插入圖片描述

回車

在這里插入圖片描述

這個就是arr在內存中的地址。

我們還可以更改列數,使得我們方便查看。因為1個16進制位對應4個二進制位,2個十六進制位對應一個字節。所以我們把這個改成4就可以4字節4字節的看了。

int類型剛好4個字節。

在這里插入圖片描述

在這里插入圖片描述

中間那一堆就是內存中的值,以16進制存在。

隨著我們程序的進行,內存里的這些值也會發生變化。

在這里插入圖片描述

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

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

相關文章

Git使用(3):版本管理

一、查看歷史 編寫一個java類進行測試 選擇Git -> Show Git Log查看日志。 第一次修改推送到遠程倉庫了,所以有origin(遠程倉庫地址),第二次修改只提交到本地倉庫所以沒有。 二、版本回退 1、本地回退 在要回退的版本上右鍵&a…

XLSX文件刪除了怎么找回?8個恢復方法,太實用了!

U盤作為一種便攜的存儲設備,隨之而來的數據丟失問題也讓人頭疼。尤其是當U盤中的XLSX文件(Excel 2007及以后版本的默認文件格式)被誤刪除或丟失時,如何高效找回這些數據成為了許多人關注的焦點。 本文將從XLSX文件的特性、U盤格式…

C++set關聯式容器

Cset 1. 關聯式容器 vector、list、deque、forward_list(C11)等STL容器,其底層為線性序列的數據結構,里面存儲的是元素本身,這樣的容器被統稱為序列式容器。而map、set是一種關聯式容器,關聯式容器也是用來存儲數據的&#xff0…

深度盤點在當今經濟形勢下資深項目經理或PMO的或去或從

在當今經濟形勢下,資深項目經理(Project Manager)或項目管理辦公室(PMO)的去向和選擇受到多種因素的影響。以下是對他們可能面臨的或去或從的深度盤點: 1、發展去向 1. 深化專業領域:在經濟形勢…

Linux程序開發(一):Linux基礎入門安裝和實操手冊

Tips:"分享是快樂的源泉💧,在我的博客里,不僅有知識的海洋🌊,還有滿滿的正能量加持💪,快來和我一起分享這份快樂吧😊! 喜歡我的博客的話,記得…

CSAP_MAT_BOM_MAINTAIN 返回消息處理

CSAP_MAT_BOM_MAINTAIN是創建修改BOM的函數,但這個函數的返回參數中沒有消息返回。 需要在調用前使用函數: CALL FUNCTION CALO_INIT_APIEXPORTINGdata_reset_sign EXCEPTIONSlog_object_not_found 1log_sub_object_not_found 2other_e…

QT筆記 - QPainter 填充環形區域(甜甜圈)

以矩形為例: QPainter painter(this);// painter.setPen(Qt::blue);// painter.setFont(QFont("Arial",30));// painter.drawText(rect(),Qt::AlignCenter,"Hello Qt!!!");QRect rect QRect(50, 50, 400, 400);QRect box QRect(100, 100, 105…

TS-抽象類和靜態成員

目錄 1,抽象類1,為什么需要抽象類2,抽象成員3,設計模式-模板模式 2,靜態成員1,什么是靜態成員2,設計模式-單例模式 1,抽象類 1,為什么需要抽象類 有時,某個…

Java面試八股之Java中有哪些原子類,原理是什么

Java中有哪些原子類,原理是什么 AtomicInteger 和 AtomicLong: 用于對整數(int)和長整數(long)進行原子操作。 原理:它們內部封裝了一個整型或長整型變量,并通過使用Unsafe類提供…

HarmonyOS - 記一次HSP異常堆棧無法定位問題

問題背景 HSP混淆打包之后無法定位異常堆棧,問題堆棧為: MyModules/build/default/cache/default/defaultCompileArkTS/esmodule/release/MyModules/src/main/ets/d/r.ts:1:1 問題原因: 導致無法定位問題的原因是,混淆時開啟了代碼…

OpenHarmony 實戰開發——ArkUI容器類API介紹

容器類,顧名思義就是存儲的類,用于存儲各種數據類型的元素,并具備一系列處理數據元素的方法。在 ArkUI 開發框架中,容器類采用了類似靜態的語言來實現,并通過 NAPI 框架對外提供。通過對存儲位置以及屬性的限制&#x…

關于數據結構B+TREE 和 HASH的整理

一、BTREE BTree是一種樹數據結構,是B-Tree的變種,屬于n叉排序樹,每個節點通常有多個孩子。 BTree是和B-Tree相比,BTree的所有的數據都會出現在葉子節點上,并且葉子節點會形成一個單向鏈表,非葉子節點僅僅…

C++map容器關聯式容器

Cmap 1. 關聯式容器 vector、list、deque、forward_list(C11)等STL容器,其底層為線性序列的數據結構,里面存儲的是元素本身,這樣的容器被統稱為序列式容器。而map、set是一種關聯式容器,關聯式容器也是用來存儲數據的&#xff0…

日期問題,

日期問題 ac代碼 #include <cstdio> #include <iostream>using namespace std;int days[13] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool check_valid(int year, int month, int day) {if (month 0 || month > 12) return false;if (day 0) …

【開發】模型部署筆記

目錄 模型量化 模型量化 1、模型量化優點 低精度模型表示模型權重數值格式為FP16&#xff08;半精度浮點&#xff09;或者INT8&#xff08;8位定點整數&#xff09;&#xff0c;但是目前低精度往往就指代INT8。常規精度模型則一般表示模型權重數值格式為FP32&#xff08;32位…

求數組最大值

#include <bits/stdc.h> using namespace std; int main(){int a[4]{1,2,3,4};cout<<*max_element(a,a4);return 0; }

策略模式詳解

策略模式 1 概述 先看下面的圖片&#xff0c;我們去旅游選擇出行模式有很多種&#xff0c;可以騎自行車、可以坐汽車、可以坐火車、可以坐飛機。 作為一個程序猿&#xff0c;開發需要選擇一款開發工具&#xff0c;當然可以進行代碼開發的工具有很多&#xff0c;可以選擇Idea進…

JavaScript的跳轉傳參方式

在JavaScript中&#xff0c;頁面跳轉并傳遞參數通常可以通過幾種不同的方式來實現。下面是一些常見的方法&#xff1a; 1.URL參數&#xff08;Query String&#xff09; 這是最常見的方式&#xff0c;通過在URL的末尾添加參數來實現。例如&#xff1a; javascriptwindow.loc…

gitlab webhook觸發jenkins任務

配置jenkins 安裝gitlab插件 配置jenkins job 選擇gitlab webhook觸發 在高級中生成token 代碼倉設置 新增webhook 配置webhook 測試連接 缺點&#xff0c;不能帶gitLab事件的參數&#xff01;&#xff01;&#xff01;