日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Delphi应用程序的调试(二)使用断点

發(fā)布時(shí)間:2024/10/12 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Delphi应用程序的调试(二)使用断点 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Delphi應(yīng)用程序的調(diào)試(二)使用斷點(diǎn)

使用斷點(diǎn)(Using Breakpoints)

當(dāng)用戶(hù)從Delphi IDE 運(yùn)行程序時(shí),程序全速運(yùn)行,只會(huì)在設(shè)置了斷點(diǎn)的地方停住。

New Term

斷點(diǎn)(breakpoint)是一種標(biāo)記,用以通知編譯器,當(dāng)程序運(yùn)行到斷點(diǎn)所在位置時(shí)暫停程序的執(zhí)行。

設(shè)置和清除斷點(diǎn)(Setting and Clearing Breakpoints)

斷點(diǎn)的設(shè)置可通過(guò)點(diǎn)擊Code Editor的溝槽來(lái)進(jìn)行;要在代碼的某一行暫停程序執(zhí)行,就在溝槽中與該行相對(duì)應(yīng)的位置上點(diǎn)擊鼠標(biāo),該行就被設(shè)置上一個(gè)斷點(diǎn);此時(shí),溝槽中出現(xiàn)一個(gè)斷點(diǎn)圖標(biāo)(一個(gè)紅色圓圈),并且斷點(diǎn)所在行以紅色加亮顯示,如下圖:

點(diǎn)擊溝槽中的斷點(diǎn)圖標(biāo),與之對(duì)應(yīng)的斷點(diǎn)就會(huì)被刪除。也可以按【F5】鍵或從Code Editor的快捷菜單中選擇【Toggle Breakpoint】菜單項(xiàng)來(lái)觸發(fā)或取消斷點(diǎn)。

Note

只允許在能生成實(shí)際代碼的行上設(shè)置斷點(diǎn)。在空白行、注釋或聲明行上設(shè)置的斷點(diǎn)時(shí)無(wú)效斷點(diǎn),當(dāng)用戶(hù)在這一類(lèi)的行上設(shè)置斷點(diǎn),調(diào)試器會(huì)提出警告。試圖在下列行上設(shè)置斷點(diǎn),都會(huì)產(chǎn)生一個(gè)無(wú)效斷點(diǎn)警告:

可在函數(shù)或過(guò)程的end語(yǔ)句行上設(shè)置斷點(diǎn)。

如果在無(wú)效行上設(shè)置斷點(diǎn),Code Editor會(huì)以綠色顯示斷點(diǎn),如上圖所示。

在調(diào)試器下運(yùn)行的程序,在不碰到斷點(diǎn)時(shí),與通常的程序運(yùn)行完全一樣;當(dāng)碰到斷點(diǎn)時(shí),IDE會(huì)被提到最頂層,并且源代碼中的斷點(diǎn)所在行被加亮顯示。如果使用的是缺省顏色格式,則程序停止處的行以紅色加亮顯示,如下圖,紅色斷點(diǎn)旁有一個(gè)綠色小箭頭:

New Term

執(zhí)行點(diǎn)(execution point)是指源代碼中下一步要執(zhí)行的代碼行。

當(dāng)用戶(hù)一步一步調(diào)試程序時(shí),執(zhí)行點(diǎn)以藍(lán)色加亮顯示,并且在Code Editor溝槽中顯示一個(gè)綠色箭頭符號(hào)。提醒:以藍(lán)色加亮顯示的行還未被執(zhí)行;當(dāng)恢復(fù)程序執(zhí)行時(shí)才執(zhí)行它。如下圖:

Note

當(dāng)執(zhí)行點(diǎn)所在行以藍(lán)色加亮顯示,除非該行包含一個(gè)斷點(diǎn)(此時(shí),該行以紅色加亮顯示)。溝槽中的綠色箭頭是當(dāng)前執(zhí)行點(diǎn)的最精確指示,因?yàn)樗皇芗恿溜@示顏色的影響。

當(dāng)程序在斷點(diǎn)處暫停執(zhí)行時(shí),用戶(hù)可查看變量、查看調(diào)用棧、瀏覽符號(hào)或在代碼中步進(jìn)。檢查完變量和對(duì)象后,可點(diǎn)擊Run按鈕恢復(fù)程序的執(zhí)行,這時(shí)應(yīng)用程序就會(huì)再次正常運(yùn)行,直至碰到下一個(gè)斷點(diǎn)。

Note

當(dāng)程序在斷點(diǎn)處暫停執(zhí)行后,用戶(hù)一般都要檢測(cè)代碼編寫(xiě)錯(cuò)誤。如果用戶(hù)在調(diào)試會(huì)話(huà)中間修改了源代碼,然后按Run按鈕恢復(fù)程序執(zhí)行,IDE就會(huì)顯示一個(gè)消息框提示用戶(hù)是否要重建源代碼;如果用戶(hù)選Yes,當(dāng)前過(guò)程就會(huì)被終止,源代碼被重新編譯,并重新啟動(dòng)該程序。

這樣操作就有一個(gè)問(wèn)題,程序無(wú)法正常關(guān)閉,當(dāng)前正使用的資源未被釋放。這樣極可能導(dǎo)致內(nèi)存泄露(memory leaks)。建議大家正常終止程序,然后再重新編譯應(yīng)用程序。

斷點(diǎn)列表窗口(The Breakpoint List Window)

Delphi IDE記載用戶(hù)設(shè)置的斷點(diǎn),可通過(guò)Breakpoint List(斷點(diǎn)列表)窗口查看這些斷點(diǎn)。從主菜單上選擇【View | Debug Windows | Breakpoint】菜單項(xiàng)來(lái)查看斷點(diǎn)列表,如下圖:

Note

Pass欄不是顯示某個(gè)斷點(diǎn)被碰上的次數(shù),它只是顯示用戶(hù)為斷點(diǎn)設(shè)置的通過(guò)條件。

1、快捷菜單(Breakpoint List Context Menus)

  • Enabled——允許使用或禁止使用某個(gè)斷點(diǎn)。如果一個(gè)斷點(diǎn)被禁止使用,它在Breakpoint List窗口中的符號(hào)就會(huì)變灰;它在源窗口中的斷點(diǎn)符號(hào)也會(huì)變灰;并且該斷點(diǎn)所在行以綠色加亮顯示,表示該斷點(diǎn)被禁用。如下圖:?
  • Delete——?jiǎng)h除斷點(diǎn)。
  • View Source——滾動(dòng)Code Editor中的源文件來(lái)顯示包含斷點(diǎn)的源代碼行。
  • Edit Source—— 將編輯光標(biāo)放置到源代碼中包含斷點(diǎn)的行上。并將輸入焦點(diǎn)切換到Code Editor上。
  • Properties—— 顯示“Source Breakpoint Properties”斷點(diǎn)屬性對(duì)話(huà)框。
  • Breakpoints—— 顯示斷點(diǎn)有關(guān)的子菜單,如下圖:?
  • Dockable—— 確定“Breakpoint List”窗口是否可泊位。

Note

快捷菜單中的【Add】菜單項(xiàng)作用不大,因?yàn)?#xff0c;在Code Editor中設(shè)置斷點(diǎn)要比通過(guò)Breakpoint List窗口中的Add命令來(lái)添加斷點(diǎn)容易的多。

2、斷點(diǎn)的啟用和禁用(Enabling and Disabling Breakpoints)

用戶(hù)在任何時(shí)候都可以禁止和啟用斷點(diǎn)。如果用戶(hù)想要正常運(yùn)行程序,就可將程序中的斷點(diǎn)暫時(shí)禁用;以后需要時(shí)可啟用該斷點(diǎn)而不必重新創(chuàng)建它。調(diào)試器忽略被禁用的斷點(diǎn)。

要啟用或禁用一個(gè)斷點(diǎn)。在“Breakpoint List”窗口中用鼠標(biāo)右鍵點(diǎn)擊該斷點(diǎn),并從快捷菜單中選擇【Enabled】項(xiàng)。

3、修改斷點(diǎn)(Modifying Breakpoints)

要修改斷點(diǎn),可從“Breakpoint List”窗口中選擇【Properties】菜單項(xiàng),此時(shí)會(huì)顯示“Source Breakpoint Properties”對(duì)話(huà)框,如下圖:

修改斷點(diǎn)的主要原因是增加斷點(diǎn)條件,在之后的講解中將要重點(diǎn)介紹。

要?jiǎng)h除一個(gè)斷點(diǎn),可在“Breakpoint List”中選擇該斷點(diǎn),并按鍵盤(pán)上的【Delete】鍵盤(pán)。要?jiǎng)h除所有斷點(diǎn),可單擊鼠標(biāo)右鍵,然后選擇【Delete All】。

下面將要講解斷點(diǎn)的兩種類(lèi)型:簡(jiǎn)單斷點(diǎn)和條件斷點(diǎn)。

簡(jiǎn)單斷點(diǎn)(Simple Breakpoints)

簡(jiǎn)單斷點(diǎn)是指這樣一種斷點(diǎn),程序一執(zhí)行到斷點(diǎn)處就會(huì)被掛起。按缺省方式設(shè)置的斷點(diǎn)就是簡(jiǎn)單斷點(diǎn)。簡(jiǎn)單斷點(diǎn)不需要多作解釋。一碰到簡(jiǎn)單斷點(diǎn),程序執(zhí)行就會(huì)暫停,此時(shí)調(diào)試器等待用戶(hù)的輸入。大多數(shù)時(shí)候都是使用簡(jiǎn)單斷點(diǎn);當(dāng)用戶(hù)需要更多地控制調(diào)試過(guò)程時(shí),才使用條件斷點(diǎn)。

條件斷點(diǎn)(Conditional Breakpoints)

若碰到的斷點(diǎn)是條件斷點(diǎn),則僅當(dāng)預(yù)定義的條件滿(mǎn)足時(shí),才會(huì)暫停程序執(zhí)行。

要?jiǎng)?chuàng)建一個(gè)條件斷點(diǎn),可先在Code Editor中設(shè)置該斷點(diǎn);然后從主菜單選擇【View | Debug Windows | Breakpoint】菜單項(xiàng)調(diào)出“Breakpoint List”窗口,用鼠標(biāo)右鍵點(diǎn)擊要設(shè)置的斷點(diǎn)并選擇【Properties】菜單項(xiàng),顯示出“Source Breakpoint Properties”對(duì)話(huà)框,在此對(duì)話(huà)框中設(shè)置斷點(diǎn)的條件。

條件斷點(diǎn)有兩種類(lèi)型:

  • 第一種類(lèi)型是條件表達(dá)式斷點(diǎn)。?
    在“Source breakpoint Properties”對(duì)話(huà)框中的“Condition”字段中輸入條件表達(dá)式。如下圖:?
    ?
    當(dāng)程序運(yùn)行時(shí),碰到條件表達(dá)式斷點(diǎn)就會(huì)先求條件表達(dá)式的值,若條件表達(dá)式的值為T(mén)rue,則暫停程序執(zhí)行;若條件表達(dá)式的值為False時(shí),則該斷點(diǎn)被忽略。?
    例如:設(shè)置的條件表達(dá)式為:X > 20;當(dāng)程序運(yùn)行到該斷點(diǎn)時(shí),若X大于20則暫停程序的執(zhí)行;若X不大于20,則程序繼續(xù)往下執(zhí)行。
  • 第二種類(lèi)型是通過(guò)計(jì)數(shù)(pass count)斷點(diǎn)。?
    對(duì)于一個(gè)通過(guò)計(jì)數(shù)斷點(diǎn),只要當(dāng)碰上該斷點(diǎn)的次數(shù)達(dá)到指定次數(shù)時(shí),程序才會(huì)在該斷點(diǎn)處暫停執(zhí)行。要指定一個(gè)通過(guò)計(jì)數(shù)斷點(diǎn),可在“Source Breakpoint Properties”對(duì)話(huà)框中編輯該斷點(diǎn)并為Pass Count字段指定一個(gè)值。若將一個(gè)斷點(diǎn)的通過(guò)計(jì)數(shù)設(shè)置成3,則程序會(huì)在第三次碰到該斷點(diǎn)時(shí)暫停程序執(zhí)行。?

    Note

    通過(guò)計(jì)數(shù)是從1開(kāi)始,不是從0開(kāi)始。就像前面所指出的,通過(guò)計(jì)數(shù)為3,意味著當(dāng)程序第三次碰上某個(gè)斷點(diǎn)時(shí),該斷點(diǎn)才有效。?
    當(dāng)程序需要在程序執(zhí)行通過(guò)某個(gè)斷點(diǎn)若干次后再暫停程序執(zhí)行來(lái)檢查變量、步進(jìn)調(diào)試代碼或執(zhí)行其他調(diào)試任務(wù)時(shí),可使用通過(guò)計(jì)數(shù)斷點(diǎn)。?

    Note

    條件斷點(diǎn)會(huì)放慢程序的執(zhí)行速度,因?yàn)槊慨?dāng)碰上條件斷點(diǎn)時(shí),都要對(duì)條件求值。在調(diào)試期間,如果程序運(yùn)行緩慢,可檢查一下斷點(diǎn)列表,看是否存在不必要的條件斷點(diǎn)。?

    Note

    用戶(hù)可靈活運(yùn)用條件斷點(diǎn)來(lái)減慢程序執(zhí)行速度。如果用戶(hù)希望某段程序低速運(yùn)行以便查看,可在該代碼段中設(shè)置一個(gè)或多個(gè)條件斷點(diǎn)。將斷點(diǎn)的條件設(shè)置成永遠(yuǎn)不能成立的條件,則程序執(zhí)行會(huì)放慢速度,但不會(huì)停住。

運(yùn)行至光標(biāo)處命令(The Run to Cursor Command)

還有一個(gè)調(diào)試命令值得一提,就是“Run to Cursor”命令,可從主菜單【Run | Run to Cursor】選擇此命令。當(dāng)用“Run to Cursor”命令運(yùn)行程序時(shí),程序會(huì)在包含編輯光標(biāo)的源代碼行上停止運(yùn)行,就好像該代碼行上設(shè)置有斷點(diǎn)一樣。如下圖:

Run to Cursor”可用作臨時(shí)斷點(diǎn)。當(dāng)用戶(hù)要馬上檢查某行源代碼時(shí),不必在該行上設(shè)置斷點(diǎn);只需將光標(biāo)移到這一行上,然后選“Run to Cursor”(或按F4鍵),調(diào)試器會(huì)在程序運(yùn)行至該行時(shí)暫停程序執(zhí)行。就好像該行上設(shè)置了斷點(diǎn)一樣。使用“Run to Cursor”的好處是:當(dāng)完成一段代碼的調(diào)試后,不必清除斷點(diǎn)。

轉(zhuǎn)載于:https://www.cnblogs.com/m0488/p/9533399.html

總結(jié)

以上是生活随笔為你收集整理的Delphi应用程序的调试(二)使用断点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。