亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

使用VC6.0對C語言程序進行調試的基本手段分享

2020-01-26 15:58:50
字體:
來源:轉載
供稿:網友

(1)設置固定斷點或臨時斷點

所謂斷點,是指定程序中的某一行,讓程序運行至該行后暫停運行,使得程序員可以觀察分析程序的運行過程中的情況。這些情況一般包括:

①在變量窗口(Varibles)中觀察程序中變量的當前值。程序員觀察這些值的目的是與預期值對比,若與預期值不一致,則此斷點前運行的程序肯定在某個地方有問題,以此可縮小故障范圍。例如以下程序是計算cos(x)并顯示,運行時發現無論x輸入為多少,結果都是0.046414。

復制代碼 代碼如下:

#include <stdio.h>
#include <math.h>

void main()
{
int  x;

printf("Please input x:");
scanf("% d", &x);
printf("cos(x)=%f/n", cos(x));
}

在該程序中,若你沒有看到問題――程序較長、較復雜時很難看出問題所在,則應該使用調試手段定位故障位置。

②在監控窗口(Watch)中觀察指定變量或表達式的值。當變量較多時,使用Varibles窗口可能不太方便,使用Watch窗口則可以有目的、有計劃地觀察關鍵變量的變化。

③在輸出窗口中觀察程序當前的輸出與預期是否一致。同樣地,若不一致,則此斷點前運行的程序肯定在某個地方有問題。

④在內存窗口(Memory)中觀察內存中數據的變化。在該窗口中能直接查詢和修改任意地址的數據。對初學者來說,通過它能更深刻地理解各種變量、數組和結構等是如何占用內存的,以及數組越界的過程。

⑤在調用堆棧窗口(Call Stack)中觀察函數調用的嵌套情況。此窗口在函數調用關系比較復雜或遞歸調用的情況下,對分析故障很有幫助。

(2)單步執行程序

讓程序被一步一步(行)地執行,觀察分析執行過程是否符合預要求。例如,以下程序預期的功能是從鍵盤上讀入兩個數(x和y),判斷x和y是否相等,相等則在屏幕上顯示x=y,不相等則顯示x<>y。這是要求實現的功能,但程序實際的運行狀況卻是:無論輸入什么,都會在屏幕上顯示x=y和x<>y,程序肯定有問題,但表面上看卻可能找不到問題所在,使用單步執行,則能定位故障點,縮小看的范圍。例如,在單步執行的過程中,若輸入“2,3”,發現x和y的值的確變成了2和3,此時按道理不應執行“printf("x=y/n");”,但單步跟蹤卻發現被執行了,因此多半問題出在“if (x = y)”。

復制代碼 代碼如下:

#include <stdio.h>
void main()
{
int  x, y;

printf("Please input x, y:");
scanf("%d,%d", &x, &y);
if (x = y)
{
  printf("x=y/n");
}
else;
{
  printf("x<>y/n");
}
}

在單步執行的過程中,應靈活應用Step Over、Step Into、Step Out、Run to Cursor等方法,提高調試效率。建議在程序調試過程中,記住并使用“Step Over、Step Into、Step Out、Run to Cursor”等菜單項的快捷鍵,開始時可能較生疏、操作較慢,但堅持一段時間就能生巧、效率提高。

(3)使用斷言

斷言是對某種假設條件進行檢查(可理解為若條件成立則無動作,否則應報告),它可以快速發現并定位軟件問題,同時對系統錯誤進行自動報警。斷言可以對在系統中隱藏很深,用其它手段極難發現的問題進行定位,從而縮短軟件問題定位時間,提高系統的可測性。實際應用時,可根據具體情況靈活地設計斷言。
使用斷言時,必須在程序的開頭加上:

#include <assert.h>

①可用斷言來確認函數的參數。示例:假設某函數參數中有一個指針,那么使用指針前可對它檢查,以防止其他人調用本函數時使用空指針作參數。代碼如下:

復制代碼 代碼如下:

int exam_fun( unsigned char *str )
{
    assert(str != NULL);  // 斷言“指針不為空”,若“空”(斷言不成立)則報錯
    ... //other program code
}

②可用斷言來確認是否發生了不該發生的情況。示例:以下程序段運行結果有錯,檢查起來很困難而且搞了很久都不知是什么地方有問題。因此,建議分析程序的正常運行情況應該是什么,運行過程中是否出了異常,針對所有(或關鍵狀態)應當正常的情況,使用斷言,就很有可能發現異常原因,且調試效率很高。針對該程序段,我們斷言(斷定)變量i的取值應該為“i>=0 && i<SIZE”且較關鍵,但在運行過程中是否有可能被無意修改(例如其它變量越界)而超出范圍呢,就可使用斷言檢查是否發生了這樣的情況。

復制代碼 代碼如下:

for (i=0; i<SIZE; i++)
{
    ... //other program code
assert(i>=0 && i<SIZE);  // 斷言“i的正常取值范圍”,若斷言不成立則報錯
array[i] = i;
    ... //other program code
}

斷言不成立時(一出現異常),系統將立即報錯,此時可進入程序調試狀態,檢查程序的運行情況。

(4)與調試相關的操作菜單:Build菜單

Compile:快捷鍵Ctrl+F7。編譯當前處于源代碼窗口中的源程序文件,以便檢查是否有語法錯誤或警告,如果有的話,將顯示在Output輸出窗口中。
Build:快捷鍵F7。對當前工程中的有關文件進行連接,若出現錯誤的話,也將顯示在Output輸出窗口中。
Execute:快捷鍵Ctrl+F5。運行(執行)已經編譯、連接成功的可執行程序(文件)。
Start Debug:選擇該項將彈出子菜單,其中含有用于啟動調試器運行的幾個選項。例如其中的Go選項用于從當前語句開始執行程序,直到遇到斷點或遇到程序結束;Step Into選項開始單步執行程序,并在遇到函數調用時進入函數內部再從頭單步執行;Run to Cursor選項使程序運行到當前鼠標光標所在行時暫停其執行(注意,使用該選項前,要先將鼠標光標設置到某一個你希望暫停的程序行處)。執行該菜單的選擇項后,就啟動了調試器,此時菜單欄中將出現Debug菜單(而取代了Build菜單)。

(5)與調試相關的操作菜單:Debug菜單

啟動調試器后才出現該Debug菜單(而不再出現Build菜單)。
Go:快捷鍵F5。從當前語句啟動繼續運行程序,直到遇到斷點或遇到程序結束而停止(與Build→Start Debug→Go選項的功能相同)。
Restart:快捷鍵Ctrl+Shift+F5。重新從頭開始對程序進行調試執行(當對程序做過某些修改后往往需要這樣做!)。選擇該項后,系統將重新裝載程序到內存,并放棄所有變量的當前值(而重新開始)。
Stop Debugging:快捷鍵Shift+F5。中斷當前的調試過程并返回正常的編輯狀態(注意,系統將自動關閉調試器,并重新使用Build菜單來取代Debug菜單)。
Step Into:快捷鍵F11。單步執行程序,并在遇到函數調用語句時,進入那一函數內部,并從頭單步執行(與Build→Start Debug→Step Into選項的功能相同)。
Step Over:快捷鍵F10。單步執行程序,但當執行到函數調用語句時,不進入那一函數內部,而是一步直接執行完該函數后,接著再執行函數調用語句后面的語句。
Step Out:快捷鍵Shift+F11。與“Step Into”配合使用,當執行進入到函數內部,單步執行若干步之后,若發現不再需要進行單步調試的話,通過該選項可以從函數內部返回(到函數調用語句的下一語句處停止)。

Run to Cursor:快捷鍵Ctrl+F10。使程序運行到當前鼠標光標所在行時暫停其執行(注意,使用該選項前,要先將鼠標光標設置到某一個你希望暫停的程序行處)。事實上,相當于設置了一個臨時斷點,與Build→Start Debug→Run to Cursor選項的功能相同。

Insert/Remove Breakpoint:快捷鍵F9。本菜單項并未出現在Debug菜單上(在工具欄和程序文檔的上下文關聯菜單上),列在此處是為了方便大家掌握程序調試的手段,其功能是設置或取消固定斷點――程序行前有一個圓形的黑點標志,表示已經該行設置了固定斷點。另外,與固定斷點相關的還有Alt+F9(管理程序中的所有斷點)、Ctrl+F9(禁用/使能當前斷點)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久成人| 成人国产亚洲精品a区天堂华泰| 欧美精品久久久久久久久| 色老头一区二区三区在线观看| 中文字幕在线国产精品| 在线成人免费网站| 国产精品自在线| 国产精品免费观看在线| 亚洲在线免费观看| 亚洲激情视频网| 亚洲japanese制服美女| 欧美中在线观看| 亚洲一区二区三区久久| 91精品国产91久久久久| 亚洲欧洲在线视频| 亚洲天堂av在线免费观看| 色狠狠av一区二区三区香蕉蜜桃| 欧美孕妇孕交黑巨大网站| 91国产美女在线观看| 欧美日韩亚洲视频一区| 日本精品视频在线| 亚洲国产精品va在看黑人| 91网在线免费观看| 日韩电影大片中文字幕| 九九热视频这里只有精品| 青青久久av北条麻妃海外网| 日本道色综合久久影院| www.日韩av.com| 国产欧美最新羞羞视频在线观看| 国产在线精品一区免费香蕉| 性欧美暴力猛交69hd| 最近的2019中文字幕免费一页| 亚洲aⅴ男人的天堂在线观看| 国产成人亚洲综合91| 国产精品爱啪在线线免费观看| 精品国产91久久久| 欧美最猛性xxxxx(亚洲精品)| 国产精品旅馆在线| 久久五月情影视| 国产免费一区视频观看免费| 欧美日韩中文在线| 97在线观看视频国产| 日韩中文字幕在线观看| 九九热视频这里只有精品| 欧美日本中文字幕| 91高清视频免费| 色伦专区97中文字幕| 性色av香蕉一区二区| 91精品国产自产在线观看永久| 国产福利精品视频| 久久久久久69| 久久99国产精品自在自在app| 日韩欧美福利视频| 日产日韩在线亚洲欧美| 国产精品日日做人人爱| 国产v综合ⅴ日韩v欧美大片| 国产精品成久久久久三级| 亚洲bt天天射| 亚洲欧美另类国产| 日韩av电影在线播放| 国产欧美精品一区二区三区-老狼| 欧美激情一级精品国产| 欧美在线免费看| 日韩欧美国产免费播放| 亚洲精品一区av在线播放| 欧美日韩国产精品专区| 国产精品久久久久久久app| 欧美插天视频在线播放| 日韩欧美成人免费视频| 理论片在线不卡免费观看| 黑人巨大精品欧美一区二区免费| 亚洲综合在线小说| 亚洲精品久久久久久久久久久久久| 91超碰caoporn97人人| 日韩av电影手机在线观看| 亚洲第一精品夜夜躁人人爽| 国产精品久久久久久久av电影| 日韩欧美在线免费| 91影院在线免费观看视频| 中文字幕欧美亚洲| 欧美性生活大片免费观看网址| 欧美电影在线观看完整版| 亚洲最新av在线网站| 国产精品电影一区| 97视频在线观看亚洲| 精品久久久久久久久久ntr影视| 午夜精品免费视频| 欧美电影电视剧在线观看| 亚洲日本aⅴ片在线观看香蕉| 国产精品久久久久久久久| 欧美噜噜久久久xxx| 国产精品久久77777| 亚洲第一精品夜夜躁人人爽| 91免费视频国产| 精品久久久久久亚洲国产300| 国产欧美精品一区二区| 欧美日韩久久久久| 国产香蕉一区二区三区在线视频| 亚洲一二在线观看| 久久国产加勒比精品无码| 国产欧美一区二区三区久久人妖| 亚洲第一精品夜夜躁人人躁| 久久久久五月天| 成人精品视频久久久久| 精品在线欧美视频| 超碰精品一区二区三区乱码| 97国产真实伦对白精彩视频8| 亚洲精品网址在线观看| 992tv成人免费影院| 亚洲精品国精品久久99热| 国产精品啪视频| 欧美黄色片免费观看| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品一区二区久久久| 91欧美日韩一区| 久久影院资源网| 精品一区二区三区电影| 中文字幕欧美视频在线| 久久精品国产成人精品| 欧美亚洲国产另类| 中文字幕在线日韩| 成人国产精品一区二区| 日韩成人在线网站| 国产成人中文字幕| 一本一本久久a久久精品综合小说| 亚洲精品电影久久久| 国产精品一二三在线| 国产一区二区美女视频| 中文字幕亚洲精品| 国产一区二区三区在线观看视频| 欧美性20hd另类| 91av国产在线| 成人xxxxx| 91中文精品字幕在线视频| 欧美午夜片在线免费观看| 成人黄色免费片| 亚洲变态欧美另类捆绑| 欧美自拍视频在线| 在线成人激情视频| 98午夜经典影视| 欧美视频国产精品| 亚洲男人天堂2019| 欧美性猛交丰臀xxxxx网站| 青青久久av北条麻妃海外网| 色狠狠久久aa北条麻妃| 日韩电影网在线| 国产精品久久久久久久久久新婚| 98精品国产自产在线观看| 午夜精品久久久久久久白皮肤| 在线午夜精品自拍| 欧美精品久久久久久久久久| 欧美激情在线播放| 亚洲级视频在线观看免费1级| 精品国产欧美成人夜夜嗨| 欧美资源在线观看| 在线观看91久久久久久| 色黄久久久久久| 欧美裸体xxxx| 久久久精品在线| 午夜精品理论片| 成人久久久久久| 成人免费在线视频网站| 国产精品伦子伦免费视频| 日韩hd视频在线观看|