跳轉到內容

Visual Studio/智慧感知和除錯

來自華夏公益教科書,開放的書籍,開放的世界

程式設計師最艱鉅的任務之一是除錯程式——反覆測試以確保程式沒有錯誤。在這裡,我們將簡要介紹 Visual Studio 可以為開發者提供哪些幫助。

智慧感知

[編輯 | 編輯原始碼]

它是一個模糊邏輯系統,用於預測程式碼輸入。例如,假設你的程式碼如下所示

#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
	int a, b;
	cout << "Enter the two numbers\n";
	cin >> a >> b;
}

現在我們要插入一條 cout 行,給出兩個數字的總和。當輸入 cout 時,Visual Studio 會立即顯示一個框,建議您剛輸入內容的可能結果。

按 Tab 鍵接受給定的輸出。
僅此一項就非常強大,因為它可以節省開發人員的時間。您不必手動編寫每個命令,只需輸入一部分,Visual Studio 就會建議您想到的內容。

在 Visual Studio 2012 之前,C++ 的智慧感知需要手動按下 CRTL+J 來呼叫。

錯誤檢測

[編輯 | 編輯原始碼]

智慧感知的另一個非常有用的功能是在執行時之前檢測錯誤。其中一些錯誤非常瑣碎

在上面的例子中,if 被錯誤地拼寫為 iff

但是,在某些情況下,智慧感知會報告神秘的錯誤。考慮以下程式碼行

3 = a;

顯然是不合邏輯的。但是,智慧感知將錯誤報告為“表示式必須是可修改的左值”。雖然其中一些錯誤很難診斷,但智慧感知會盡可能地報告行號,因此您可以使用它來查明問題。但是智慧感知並非都是金玉良言。例如,考慮以下程式碼行

cout << 0/0;

顯然,這行程式碼是不可能的。但是智慧感知沒有捕獲到它!您需要在錯誤出現之前構建它:“C2124:除以零或模除零”

除錯最基本的部分之一是設定斷點。簡單來說,它們允許您在程式執行的任何點檢視程式變數的值,當代碼片段有問題但您不確定問題在哪裡時,這非常有用。設定斷點很容易:轉到您想讓程式停止執行的程式碼行,然後按 F9。或者,單擊程式碼視窗內左側的欄。將出現一個圓圈,表示已在該行設定了斷點。

現在除錯程式。當到達指定的程式碼行時,程式會停止。以下是本示例程式在此步驟中的 Visual Studio 外觀

可以使用“區域性變數”和“自動變數”視窗檢視變數的值,或者簡單地將滑鼠懸停在該變數上(這兩個操作都在此螢幕截圖中演示)。

“區域性變數”和“自動變數”視窗都顯示變數值,但它們的目標區域不同,因此它們的目標變數也不同。

這也是檢視效能資料的時機,我們將在後面的階段介紹。

需要注意的是,如果您使用工具欄中的“暫停”選項暫停程式執行,您也會進入斷點階段。

在某些情況下,無法檢視變數,Visual Studio 會報告它們“已被最佳化掉且不可用”。這可能是由於多種原因導致的,包括但不限於堆損壞、垃圾回收等等。

效能測量

[編輯 | 編輯原始碼]

較新的 Visual Studio 版本包含用於跟蹤和分析程式對各種元件(如 CPU 和記憶體)的使用情況的功能。

現在,一旦到達斷點或程式執行暫停,就可以檢視與快照拍攝時間相對應的記憶體使用情況

這需要您定期拍攝快照,以便您可以比較程式在兩個不同時間點的記憶體消耗和使用情況。還可以檢視到目前為止的 CPU 處理資訊

請注意,必須明確啟用相關選項,因為它們會產生額外的 CPU 開銷,並且可能會影響程式,具體取決於其預期任務。

Visual Studio 中的 C

[編輯 | 編輯原始碼]

儘管 Visual Studio C++ 主要用於支援 C++,但 Visual Studio 對 C 程式設計 語言提供了相當強大的支援。但是,問題在於沒有隱式選項可以這樣做。

為了解決這個問題,建立一個空的專案檔案。然後,在“解決方案資源管理器”中,新增一個新的 C++ 檔案,但是 將副檔名設定為 .c 而不是 .cpp

智慧感知支援是可用的,但它不是 C++。為了證明這一點,cout 將不再起作用,因為它不是 C 規範的一部分;您需要使用 printf

華夏公益教科書