如何在visualc60下除錯c語言

2022-01-01 07:12:36 字數 3890 閱讀 3812

1樓:育知同創教育

1.vc除錯功能簡介

當一個c源程式編輯完成之後,你可以用上節講的方法進行編譯、執行。如果程式無編譯錯誤,但無執行結果,或執行結果有誤時,你就需要呼叫vc的編譯除錯工具來除錯你的程式,以便找出出錯的原因,從而達到正確的執行結果。

vc為除錯c程式提供了多種工具和多組方法,常用的方法有選單法、工具欄法和功能鍵法。實際上,這三種方法是相似或相同的,只是根據使用者的熟悉程度和習慣用法選擇其中之一,來完成你的除錯過程。作者習慣使用功能鍵法,因為使用功能鍵既方便操作,又能節省除錯程式的時間,使除錯過程在較短的時間內完成。

下面結合除錯工具來介紹以上立法。

在vc視窗下的選單欄和工具欄的空白處,點右鍵啟用快捷選單,選擇「編譯」選單項,這時vc視窗就出現了除錯工具欄,

除錯工具欄中的工具可分為兩部分:控制程式執行工具和設定觀察視窗工具。

① 對於控制程式執行工具,從左到右的常用按鈕、功能鍵及功能說明依次是:

●restart 重新執行程式,功能鍵是 ctrl+shift+f5。無論c源程式處於任何狀態(編輯、執行、除錯),按下此按鈕均可使程式從編譯開始,逐步進入除錯程式狀態。

●stop debugging 停止程式除錯,功能鍵是shift+f5。當除錯過程處於跟蹤程式執行的狀態時,按下此按鈕,將停止除錯程式,返回編輯狀態。編輯狀態下此按鈕無效。

● show next statement 指示當前程式執行的語句行。

● step into 單步執行並且可進入函式內部執行,功能鍵是f11。程式在除錯過程中,按下此按鈕可單步跟蹤程式執行,與stp over按鈕不同的是,該功能可進入函式內部,繼續函式內部的語句行跟蹤。

注意:使用此按鈕時,當 位於有庫函式呼叫的語句行,不用f11功能,以免進入庫函式的彙編程式塊中,取而代的是f10功能鍵。

● step over 單步執行程式,功能鍵是f10。本按鈕的功能類似於f11,但它不進入函式內部,它將每一條語句看作一步,包括函式呼叫語句。

●step out 從當前函式中退出,功能鍵是shift+f11。當程式執行至某個函式內部時,按下此按鈕後,除錯狀態即從函式內部退出,返回到呼叫該函式的主函式的當前語句。

●run to cursor 執行到當前游標位置,功能鍵是ctrl+f10。當程式處於除錯狀態時,為了跳過某程式段,可預先將游標定位在某語句行上,按下此按鈕,即可使程式直接執行到當前游標位置,從而節省了時間,加快了除錯程式的步驟。

② 對於設定觀察視窗工具,其功能主要是為配合程式跟蹤執行,設定一些觀察點,以便定位出錯的位置,從而找到出錯的原因。

● quickwatch 快速觀察表示式的值,功能鍵是shift+f9。當程式執行到某個關鍵語句行時,你可以按下該按鈕,即在螢幕上顯示「quickwatch」視窗,其中:e表示式下拉選單框中的a,是由使用者輸入的當前源程式中的一個陣列名;v 當前值列表中的「name」和「value」列的值就是a陣列中所有元素的元素名和元素值。

●watch 設定觀察點。當使用者按下該按鈕,螢幕顯示觀察視窗,其中的「name」列和「value」列為空。這時,使用者可以在name列中輸入使用者待觀察的觀察點,即程式中某個變數的名字,然後回車,在value列就顯示出該變數的當前值。

觀察點可以設定多個,多個觀察點還可以分別放在不同的觀察標籤內(watch1、watch2…)。

● variables 變數列表,當按下此按鈕,螢幕顯示如所示的變數列表視窗。視窗中的「name」列和「value」列中列出了當前函式中的所有變數名和相應的值,其中:簡單變數只顯示變數名和它的值;陣列名前面有一個「 」符號,value列顯示它的地址值。

●registers 暫存器列表,按下此按鈕,螢幕上顯示的暫存器視窗,視窗中列出了所有暫存器的內容。

●memory 記憶體列表,按下此按鈕,螢幕上顯示所示的記憶體列表視窗,其中「a地址」文字框中顯示的是記憶體的當前地址值,下面的列表框中顯示的是從指定地址開始的所有記憶體區域的值,??表示其值不確定(沒有賦確定的值)。使用者可以在程式執行時,在「watch」視窗中找到某個變數的地址或陣列名的值(陣列名本身是一個地址量),然後,將該值輸出「a地址」的文字框中,在記憶體列表區立即就能看到它的儲存值,不過該值是一個十六進位制的數,並且,一個整型數佔據四個位元組的儲存區域。

詳細內容可參考下面的例子。

圖132.使用vc除錯c程式的方法

以下程式是全國計算機等級考試二級c語言的一道上機改錯題,請考生除錯該程式,使其能按要求輸出正確的結果。

① 程式功能說明

給定程式c003.c中函式fun的功能是:從s所指字串中,找出t所指子串的個數作為函式值返回。

例如,當s所指字串中的內容為:"abcdabfab",t所指字串的內容為:"ab",則函式返回整數3。

請改正程式中的錯誤,使它能得出正確的結果。

注意: 不要改動main函式, 不得增行或刪行, 也不得更改程式的結構!

② 源程式

#define n 80

int fun(char *s, char *t)

else break;

if(*r = o)

n++;

s++;

}return n;

}main()

③ 除錯過程

a) 啟動vc系統,編輯輸出源程式,並以c003.c命名,結果如圖14所示。

圖14b) 按功能鍵ctrl+f11編譯源程式,編譯顯示結果如圖15所示。

圖15編譯結果告訴我們,程式中存在一個錯誤,兩個警告。其中:警告的原因都是因為系統函式沒有包含標頭檔案stdio.

h,錯誤的原因是第16行的識別符號(identifierf)』o』沒有定義。需要說明的是,這裡的錯誤很特別:從程式字面上看,這裡的o好象是數字0,而一般考生也分辨不出或不會認為是o。

但是,既然編譯系統給出錯誤資訊,就應該根據該錯誤資訊來修改程式。在源程式前面增加一行檔案包含命令「#include 」,再把字母o改寫成字元0(這是缺乏程式設計經驗的考生的共同作法),再一次編譯程式,結果告訴我們程式編譯成功。

然後,按ctrl+f5功能鍵,執行程式,在提示輸入的螢幕上輸入題目要求的兩個字串,螢幕顯示如圖16所示,結果再一次告訴考生:程式結果有錯,即程式中存在邏輯錯誤。

圖16c) 接下來,我們對程式作運一步除錯,以找出程式出錯的真正原因。

除錯一個存在邏輯錯誤的程式,首先要確定程式中可能出現錯誤的大概位置。根據題意說明可確定錯誤存在於函式fun中。根據這一判斷,我們先將游標定位在fun函式的第一條可執行的語句行上,然後,按下功能鍵ctrl+f10,讓程式執行到游標位置。

注意:這個過程中間要進入輸入螢幕狀態,等待輸入a和b字串,請考生按要求輸入,用回車符確認。當看到工作列的vc圖示在閃爍,請將視窗切換到vc狀態,如圖17所示:

圖17接下來,邊按功能鍵f10,邊觀察螢幕下方變數(variables)子視窗中p字串和r字串的變化,同時還要注意vc視窗左邊的黃色指點針箭頭。一直重複以上過程,你會發現,黃色箭頭始終沒有指向「n++;」語句。我們要找的第一個邏輯錯誤點就是if語句後面的表示式。

按照正常的情況,if後面的表示式應該是關係表示式或邏輯表示式,而這裡的表示式是賦值表示式,正確的語句應該是:

if(*r == 0)

n++;

修改之後再按ctrl+f5執行程式,程式結果如圖18所示。

為了利用vc的除錯功能和手段,更好地觀察其它相關變數的變化規律,在上述過程中,還可以在vc的觀察(watch)視窗輸入其它變數,在跟蹤程式執行過程中觀察其變化。

圖18這種結果也不對,這是第一次錯誤結果的另一個極端:從m=0變到m=10。

如何查詢其中的原因?不仿再回顧一下剛才在跟蹤程式執行時,變數(variables)視窗中的p和r字串的值的變化情況,再結合程式中r字串的作用,不難看出,p和r應該是不同的字串,且p字串是指向s字串,而r字串則應該指向t字串。正確的結果應該是:

將語句「r=p;」改成「r=t;」。

2樓:網路小礦工

直接執行就行了啊,新建c++資原始檔就可以了,歡迎加ng論壇,一起學程式設計

如何在Visual C 6 0上執行C語言

不需要什麼特別的。如果已經寫好的.c檔案,直接用vc 6.0開啟,主要修改 1 一定要有包含檔案。2 主要main 的格式 void main 若是在vc6.0上寫程式,直接當作是寫c語言的,請參考vc 6.0的基本操作。把vc 6.0只當做編譯工具,其他還用c語言的那一套就ok.加上標頭檔案 in...

使用visualc60如何生成

直接在你存放路徑bai下的debug資料夾裡面去du找zhi,裡面有一個 exe的就dao是你要的檔案,內但是你的直接執行的話容可能一開啟閃了一下就消失了,解決的方法是你在原始檔的末尾新增一個或多個scanf語句,用於接收一個與程式本身無關的資料,這樣的話就不會消失了。比如 scanf c i sc...

如何用Visual C 6 0編寫程式

工具 microsoft visual c 6.0方法 點選檔案 新建,選擇c source file,輸入檔名及位置 編寫測試 點選元件 編譯 檔名 點 是 下圖為沒有錯誤的效果圖 如何用microsoft visual c 6.0編寫程式 工具 visual studio2010 方法如下 在h...