<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計(jì)應(yīng)用 > LabVIEW程序的調(diào)試方式

          LabVIEW程序的調(diào)試方式

          作者: 時(shí)間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
          調(diào)試工具是任何一種程序開發(fā)環(huán)境都必須提供的功能,它們可以顯著地提高程序員的開發(fā)效率。LabVIEW作為一種圖形化程序設(shè)計(jì)語言的IDE工具(同時(shí)也是一門獨(dú)特的語言),自然需要考慮為工程師提供適合于圖形化語言調(diào)試的工具。
          事實(shí)上,LabVIEW并沒有規(guī)定哪些工具被劃分為調(diào)試工具,哪些工具被劃分為其它的工具。這種界限和定義是比較模糊的,在實(shí)際使用中,我們可以把輔助程序員更準(zhǔn)確、快捷地定位代碼執(zhí)行和Bug的工具統(tǒng)稱為“調(diào)試工具”。
          LabVIEW主要的調(diào)試工具位于工具欄,如圖 1所示。從左至右依次是:
          1. Run:運(yùn)行,單擊它會直接運(yùn)行當(dāng)前的VI,快捷鍵Ctrl + R。
          2. Run Continuously:連續(xù)運(yùn)行。
          3. Abort Execution:中止運(yùn)行,單擊它會停止當(dāng)前運(yùn)行的VI。
          4. Pause:暫停運(yùn)行。
          5. Highlight Execution:高亮執(zhí)行工具,單擊它程序會變慢,反映整個(gè)數(shù)據(jù)流運(yùn)行的過程。
          6. Retain Wire Values:單擊它會保留當(dāng)前連接線上的值(這一點(diǎn)在后面描述)。
          7. Start Single Stepping:單步執(zhí)行,此時(shí)程序往前運(yùn)行一個(gè)節(jié)點(diǎn)。
          8. Step Over:跳過當(dāng)前的節(jié)點(diǎn)。
          9. Step Out:跳出單步執(zhí)行。
          10. Step Into:進(jìn)入到某一個(gè)子VI中執(zhí)行。
          其中(1)~(4)是常用的工具,用來控制VI的運(yùn)行、暫停和停止;而(7)~(10)是其它的程序設(shè)計(jì)語言的IDE環(huán)境均具備的,用法也沒有其它的區(qū)別。因此,本文將著重介紹LabVIEW中特有的程序調(diào)試工具或者方法。


          圖 1 LabVIEW的工具欄

          1.1錯(cuò)誤列表(Error List)

          LabVIEW作為一種圖形化的編譯型語言,其編譯的過程是在后臺自動(dòng)完成的(無需程序員手動(dòng)編譯),編譯后的目標(biāo)代碼也存儲在vi文件中。因此LabVIEW會“實(shí)時(shí)地”判斷代碼是否能夠正常運(yùn)行。當(dāng)無法正常運(yùn)行時(shí),將彈出Error List對話框,列出當(dāng)前VI繼承中所有的錯(cuò)誤,如圖 2所示。
          對話框分為3個(gè)部分,分別表示發(fā)生錯(cuò)誤的VIs、發(fā)生錯(cuò)誤的節(jié)點(diǎn)和錯(cuò)誤簡單表述、錯(cuò)誤的詳細(xì)描述。雙擊某一個(gè)VI可以直接打開該VI,雙擊某個(gè)錯(cuò)誤節(jié)點(diǎn)可以直接定位到該節(jié)點(diǎn)節(jié)點(diǎn)。


          圖 2 Error List對話框
          通常使用該方式可以快速地定位發(fā)生錯(cuò)誤的VI或節(jié)點(diǎn),并根據(jù)錯(cuò)誤描述進(jìn)行修改。有時(shí)候會出現(xiàn)LabVIEW的“運(yùn)行”箭頭是斷開,而Error List對話框中卻沒有顯示任何錯(cuò)誤的情況。這是由于LabVIEW在內(nèi)存中的已編譯代碼無法執(zhí)行,只需要把當(dāng)前的VI重新強(qiáng)制編譯即可,方法是在單擊“運(yùn)行”箭頭的同時(shí)按住Ctrl鍵(LabVIEW 8.6.1之前的版本可能是Ctrl + Shift鍵)。

          1.2VI繼承和調(diào)用(VI Hierarchy)

          LabVIEW允許并且鼓勵(lì)子VI的調(diào)用,因此VI之間存在著調(diào)用與被調(diào)用關(guān)系,LabVIEW將這種關(guān)系以圖形的方式表示出來,稱之為“VI繼承”(動(dòng)態(tài)調(diào)用的VI將不會顯示其調(diào)用與被調(diào)用的關(guān)系)。選擇View>>VI Hierarchy菜單項(xiàng),彈出VI之間的關(guān)系圖,如圖 3所示。


          圖 3 VI Hierarchy
          從該圖中可以迅速地看出當(dāng)前VI的子VI以及被調(diào)用的VI之間的關(guān)系,雙擊某個(gè)VI的圖標(biāo)可以快速地打開該VI前面板。
          【小技巧】
          雙擊某個(gè)VI圖標(biāo)的同時(shí)按住Ctrl鍵能夠直接打開VI的后面板。
          當(dāng)LabVIEW暫停在某個(gè)VI中時(shí),會在背面板工具欄中顯示當(dāng)前VI被調(diào)用的VIs列表,如圖 4所示。從圖中可以看出,當(dāng)前的VI正被1.vi調(diào)用,單擊該選項(xiàng),可以看出整個(gè)被調(diào)用關(guān)系的列表VIs。當(dāng)從列表中選擇某一個(gè)VI時(shí),LabVIEW會自動(dòng)定位到該VI。


          圖 4 VI Caller Chain

          1.3斷點(diǎn)工具(Breakpoint)

          LabVIEW運(yùn)行對背面板中的任何一個(gè)節(jié)點(diǎn)和連線都可以設(shè)置斷點(diǎn),程序運(yùn)行到斷點(diǎn)位置時(shí)會暫停運(yùn)行。
          在需要放置斷點(diǎn)的位置上右擊,選擇彈出菜單中的Breakpoint菜單項(xiàng),使用Set Breakpoint指令可以在當(dāng)前位置放置一個(gè)斷點(diǎn),如圖 5所示。


          圖 5 Breakpoint快捷菜單
          當(dāng)在已經(jīng)存在斷點(diǎn)的位置上右擊鼠標(biāo)時(shí),會彈出圖 6所示的快捷菜單。使用Clear Breakpoint菜單項(xiàng)可以清除當(dāng)前的斷點(diǎn),而Disable Breakpoint可以禁止當(dāng)前的斷點(diǎn),此時(shí)斷點(diǎn)將不再暫停程序的執(zhí)行。


          圖 6 Breakpoint快捷菜單
          在大型的程序調(diào)試中,斷點(diǎn)往往是使用的最為頻繁的工具,它使得程序員能夠迅速地專注于所關(guān)心的VI,而對于其它的VI執(zhí)行過程則正常運(yùn)行。通常,程序員為了找到某個(gè)Bug出現(xiàn)的原因,會在背面板中設(shè)置若干個(gè)斷點(diǎn),而一旦清除掉Bug后又需要將這些斷點(diǎn)一一地清除,這難免會重復(fù)和繁瑣。LabVIEW 8.6提供了一個(gè)斷點(diǎn)管理的工具,可以選擇圖 5或圖 6中的Breakpoint Manager菜單項(xiàng),啟動(dòng)如所示的斷點(diǎn)管理對話框(或者直接使用View>>Breakpoint Manager菜單項(xiàng))。該對話框中列出了當(dāng)前內(nèi)存中所有VI中包含的斷點(diǎn),程序員可以選擇任意地?cái)帱c(diǎn)批量地將它們清除或者禁設(shè)置為禁止?fàn)顟B(tài)。

          上一頁 1 2 下一頁

          關(guān)鍵詞: LabVIEW程序調(diào)試方

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();