LabVIEW程序的調(diào)試方式
事實上,LabVIEW并沒有規(guī)定哪些工具被劃分為調(diào)試工具,哪些工具被劃分為其它的工具。這種界限和定義是比較模糊的,在實際使用中,我們可以把輔助程序員更準(zhǔn)確、快捷地定位代碼執(zhí)行和Bug的工具統(tǒng)稱為“調(diào)試工具”。
LabVIEW主要的調(diào)試工具位于工具欄,如圖 1所示。從左至右依次是:
- Run:運行,單擊它會直接運行當(dāng)前的VI,快捷鍵Ctrl + R。
- Run Continuously:連續(xù)運行。
- Abort Execution:中止運行,單擊它會停止當(dāng)前運行的VI。
- Pause:暫停運行。
- Highlight Execution:高亮執(zhí)行工具,單擊它程序會變慢,反映整個數(shù)據(jù)流運行的過程。
- Retain Wire Values:單擊它會保留當(dāng)前連接線上的值(這一點在后面描述)。
- Start Single Stepping:單步執(zhí)行,此時程序往前運行一個節(jié)點。
- Step Over:跳過當(dāng)前的節(jié)點。
- Step Out:跳出單步執(zhí)行。
- Step Into:進入到某一個子VI中執(zhí)行。
圖 1 LabVIEW的工具欄
1.1錯誤列表(Error List)
LabVIEW作為一種圖形化的編譯型語言,其編譯的過程是在后臺自動完成的(無需程序員手動編譯),編譯后的目標(biāo)代碼也存儲在vi文件中。因此LabVIEW會“實時地”判斷代碼是否能夠正常運行。當(dāng)無法正常運行時,將彈出Error List對話框,列出當(dāng)前VI繼承中所有的錯誤,如圖 2所示。對話框分為3個部分,分別表示發(fā)生錯誤的VIs、發(fā)生錯誤的節(jié)點和錯誤簡單表述、錯誤的詳細描述。雙擊某一個VI可以直接打開該VI,雙擊某個錯誤節(jié)點可以直接定位到該節(jié)點節(jié)點。
圖 2 Error List對話框
通常使用該方式可以快速地定位發(fā)生錯誤的VI或節(jié)點,并根據(jù)錯誤描述進行修改。有時候會出現(xiàn)LabVIEW的“運行”箭頭是斷開,而Error List對話框中卻沒有顯示任何錯誤的情況。這是由于LabVIEW在內(nèi)存中的已編譯代碼無法執(zhí)行,只需要把當(dāng)前的VI重新強制編譯即可,方法是在單擊“運行”箭頭的同時按住Ctrl鍵(LabVIEW 8.6.1之前的版本可能是Ctrl + Shift鍵)。
1.2VI繼承和調(diào)用(VI Hierarchy)
LabVIEW允許并且鼓勵子VI的調(diào)用,因此VI之間存在著調(diào)用與被調(diào)用關(guān)系,LabVIEW將這種關(guān)系以圖形的方式表示出來,稱之為“VI繼承”(動態(tài)調(diào)用的VI將不會顯示其調(diào)用與被調(diào)用的關(guān)系)。選擇View>>VI Hierarchy菜單項,彈出VI之間的關(guān)系圖,如圖 3所示。圖 3 VI Hierarchy
從該圖中可以迅速地看出當(dāng)前VI的子VI以及被調(diào)用的VI之間的關(guān)系,雙擊某個VI的圖標(biāo)可以快速地打開該VI前面板。
【小技巧】
雙擊某個VI圖標(biāo)的同時按住Ctrl鍵能夠直接打開VI的后面板。
當(dāng)LabVIEW暫停在某個VI中時,會在背面板工具欄中顯示當(dāng)前VI被調(diào)用的VIs列表,如圖 4所示。從圖中可以看出,當(dāng)前的VI正被1.vi調(diào)用,單擊該選項,可以看出整個被調(diào)用關(guān)系的列表VIs。當(dāng)從列表中選擇某一個VI時,LabVIEW會自動定位到該VI。
圖 4 VI Caller Chain
1.3斷點工具(Breakpoint)
LabVIEW運行對背面板中的任何一個節(jié)點和連線都可以設(shè)置斷點,程序運行到斷點位置時會暫停運行。在需要放置斷點的位置上右擊,選擇彈出菜單中的Breakpoint菜單項,使用Set Breakpoint指令可以在當(dāng)前位置放置一個斷點,如圖 5所示。
圖 5 Breakpoint快捷菜單
當(dāng)在已經(jīng)存在斷點的位置上右擊鼠標(biāo)時,會彈出圖 6所示的快捷菜單。使用Clear Breakpoint菜單項可以清除當(dāng)前的斷點,而Disable Breakpoint可以禁止當(dāng)前的斷點,此時斷點將不再暫停程序的執(zhí)行。
圖 6 Breakpoint快捷菜單
在大型的程序調(diào)試中,斷點往往是使用的最為頻繁的工具,它使得程序員能夠迅速地專注于所關(guān)心的VI,而對于其它的VI執(zhí)行過程則正常運行。通常,程序員為了找到某個Bug出現(xiàn)的原因,會在背面板中設(shè)置若干個斷點,而一旦清除掉Bug后又需要將這些斷點一一地清除,這難免會重復(fù)和繁瑣。LabVIEW 8.6提供了一個斷點管理的工具,可以選擇圖 5或圖 6中的Breakpoint Manager菜單項,啟動如所示的斷點管理對話框(或者直接使用View>>Breakpoint Manager菜單項)。該對話框中列出了當(dāng)前內(nèi)存中所有VI中包含的斷點,程序員可以選擇任意地斷點批量地將它們清除或者禁設(shè)置為禁止?fàn)顟B(tài)。
評論