明日科技,是一家專業(yè)從事軟件開發(fā)、教育培訓(xùn)以及軟件開發(fā)教育資源整合的高科技公司,其編寫的教材既注重選取軟件開發(fā)中的必需、常用內(nèi)容,又注重內(nèi)容的易學(xué)、方便以及相關(guān)知識的拓展,深受讀者喜愛。其編寫的圖書主要有“軟件開發(fā)視頻大講堂”“軟件開發(fā)實(shí)戰(zhàn)1200例”“軟件工程師開發(fā)大系”等系列。多次榮獲“全行業(yè)品種”“中國大學(xué)出版社書”等獎(jiǎng)項(xiàng),多個(gè)品種長期位居同類圖書銷售排行榜的前列。
13.1程序調(diào)試
程序調(diào)試是在程序中查找錯(cuò)誤的過程,在開發(fā)過程中,程序調(diào)試是檢查代碼并驗(yàn)證它能否正常運(yùn)行的有效方法。另外,在開發(fā)時(shí),如果發(fā)現(xiàn)程序不能正常工作,就必須找出并解決有關(guān)問題。本節(jié)將對幾種常用的程序調(diào)試操作進(jìn)行講解。
13.1.1斷點(diǎn)
斷點(diǎn)通知調(diào)試器,應(yīng)用程序在某點(diǎn)上(暫停執(zhí)行)或某情況發(fā)生時(shí)中斷。發(fā)生中斷時(shí),稱程序和調(diào)試器處于中斷模式。進(jìn)入中斷模式并不會終止或結(jié)束程序的執(zhí)行,所有元素(如函數(shù)、變量和對象)都保留在內(nèi)存中。執(zhí)行可以在任何時(shí)候繼續(xù)。
插入斷點(diǎn)有3種方式:在要設(shè)置斷點(diǎn)行旁邊的灰色空白處單擊;右擊設(shè)置斷點(diǎn)的代碼行,在彈出的快捷菜單中選擇“斷點(diǎn)”/“插入斷點(diǎn)”命令,如圖13.1所示;單擊要設(shè)置斷點(diǎn)的代碼行,選擇菜單中的“調(diào)試”/“切換斷點(diǎn)”命令,如圖13.2所示。
圖13.1右擊插入斷點(diǎn)圖13.2菜單欄插入斷點(diǎn)
插入斷點(diǎn)后,就會在設(shè)置斷點(diǎn)的行旁邊的灰色空白處出現(xiàn)一個(gè)紅色圓點(diǎn),并且該行代碼也呈高亮顯示,如圖13.3所示。
圖13.3插入斷點(diǎn)后效果圖
圖13.4選擇“刪除斷點(diǎn)”命令
刪除斷點(diǎn)主要有如下3種方式。
t可以單擊設(shè)置了斷點(diǎn)的代碼行左側(cè)的紅色圓點(diǎn)。
t在設(shè)置了斷點(diǎn)的代碼行左側(cè)的紅色圓點(diǎn)上右擊,在彈出的快捷菜單中選擇“刪除斷點(diǎn)”命令。
t在設(shè)置了斷點(diǎn)的代碼行上右擊,在彈出的快捷菜單中選擇“斷點(diǎn)”/“刪除斷點(diǎn)”命令,如圖13.4所示。
13.1.2開始執(zhí)行
開始執(zhí)行是最基本的調(diào)試功能之一,從“調(diào)試”菜單(見圖13.5)中選擇“啟動(dòng)調(diào)試”命令或在源窗口中右擊,可執(zhí)行代碼中的某行,然后從彈出的快捷菜單中選擇“運(yùn)行到光標(biāo)處”命令,如圖13.6所示。
圖13.5“調(diào)試”菜單圖13.6某行代碼的右鍵菜單
除了使用上述的方法開始執(zhí)行外,還可以直接單擊工具欄中的按鈕,啟動(dòng)調(diào)試,如圖13.7所示。
圖13.7工具欄中的啟動(dòng)調(diào)試按鈕
如果選擇“啟動(dòng)調(diào)試”命令,則應(yīng)用程序啟動(dòng)并一直運(yùn)行到斷點(diǎn)。可以在任何時(shí)刻中斷執(zhí)行,以檢查值、修改變量或檢查程序狀態(tài),如圖13.8所示。
圖13.8選擇“啟動(dòng)調(diào)試”命令運(yùn)行結(jié)果
如果選擇“運(yùn)行到光標(biāo)處”命令,則應(yīng)用程序啟動(dòng)并一直運(yùn)行到斷點(diǎn)或光標(biāo)位置,具體要看是斷點(diǎn)在前還是光標(biāo)在前,可以在源窗口中設(shè)置光標(biāo)位置。如果光標(biāo)在斷點(diǎn)的前面,則代碼首先運(yùn)行到光標(biāo)處,如圖13.9所示。
圖13.9選擇“運(yùn)行到光標(biāo)處”命令運(yùn)行結(jié)果
13.1.3中斷執(zhí)行
當(dāng)執(zhí)行到達(dá)一個(gè)斷點(diǎn)或發(fā)生異常,調(diào)試器將中斷程序的執(zhí)行。選擇“調(diào)試”/“全部中斷”命令后,調(diào)試器將停止所有在調(diào)試器下運(yùn)行的程序的執(zhí)行。程序并不退出,可以隨時(shí)恢復(fù)執(zhí)行。此時(shí)調(diào)試器和應(yīng)用程序處于中斷模式。“調(diào)試”菜單如圖13.10所示。
除了通過選擇“調(diào)試”/“全部中斷”命令中斷執(zhí)行外,也可以單擊工具欄中的按鈕中斷執(zhí)行,如圖13.11所示。
圖13.10“調(diào)試”菜單圖13.11工具欄中的中斷執(zhí)行按鈕
13.1.4停止執(zhí)行
停止執(zhí)行意味著終止正在調(diào)試的進(jìn)程并結(jié)束調(diào)試會話,可以通過選擇菜單中的“調(diào)試”/“停止調(diào)試”命令來結(jié)束運(yùn)行和調(diào)試。也可以單擊工具欄中的按鈕停止執(zhí)行。
13.1.5單步執(zhí)行
通過單步執(zhí)行,調(diào)試器每次只執(zhí)行一行代碼,單步執(zhí)行主要是通過“逐語句”、“逐過程”和“跳出”這3種命令實(shí)現(xiàn)的。“逐語句”和“逐過程”的主要區(qū)別是當(dāng)某一行包含函數(shù)調(diào)用時(shí),“逐語句”僅執(zhí)行調(diào)用本身,然后在函數(shù)內(nèi)的第一個(gè)代碼行處停止。而“逐過程”執(zhí)行整個(gè)函數(shù),然后在函數(shù)外的第一行處停止。如果位于函數(shù)調(diào)用的內(nèi)部并想返回到調(diào)用函數(shù)時(shí),應(yīng)使用“跳出”命令,“跳出”命令將一直執(zhí)行代碼,直到函數(shù)返回,然后在調(diào)用函數(shù)中的返回點(diǎn)處中斷。
當(dāng)啟動(dòng)調(diào)試后,可以單擊工具欄中的按鈕執(zhí)行“逐語句”操作、單擊按鈕執(zhí)行“逐過程”操作和單擊按鈕執(zhí)行“跳出”操作,如圖13.12所示。
……