成為LabVIEW漏洞修復(fù)高手
如果您經(jīng)常使用NI LabVIEW軟件,當(dāng)軟件不能按照預(yù)期的情況運(yùn)行時(shí),您可能會(huì)有一個(gè)自己的調(diào)試技巧和技術(shù)工具箱,。 這些技巧和技術(shù)有些是常用的,而剩下的可能是您自己摸索出來的,。
圖1.巧妙的調(diào)試方法能夠清除漏洞,。(Brian Searle攝)
我們與JKI的LabVIEW程序架構(gòu)師 ( Certified LabVIEW Architects, CLA ) 以及LabVIEW社區(qū)的朋友進(jìn)行了交流,向他們學(xué)習(xí)一些快速識(shí)別,、隔離和修復(fù)漏洞的“絕密”技巧,。我們了解到以下幾個(gè)巧妙的調(diào)試技巧。
利用探針
探針是LabVIEW調(diào)試的第一個(gè)也是最簡單的工具,,但它們卻是非常強(qiáng)大的工具,。您可極其輕松地將探針置于線路上,在查找問題過程中不斷獲取信息,。 以下是探針的幾個(gè)功能:
保存連線值功能
LabVIEW開發(fā)環(huán)境中的保存連線值功能經(jīng)常會(huì)被忽略,。 當(dāng)您啟用某個(gè)VI的連線值保存功能時(shí),LabVIEW將自動(dòng)存儲(chǔ)該VI框圖上每根連線的最后一個(gè)值,。 然后,,將光標(biāo)懸停在任一連線上,即使該VI未運(yùn)行,,探針工具也將出現(xiàn)提示信,,顯示該連線最后一個(gè)值。
圖2.保存連線值按鈕就在“燈泡”圖標(biāo)旁邊,。
自定義探針,,無需編寫任何代碼
運(yùn)用LabVIEW自定義探針,,您無需編寫任何代碼就可創(chuàng)建強(qiáng)大、復(fù)雜的調(diào)試工具,。 例如,,您可在“自定義探針”>>“控件”>> “波形圖”中創(chuàng)建顯示任意數(shù)字連線的先前值的“歷史探針”。 這可幫助您發(fā)現(xiàn)您正在探究的數(shù)據(jù)的模式或趨勢,,而無需編寫特殊的探針代碼,。
圖3. 使用波形圖探針顯示簡單數(shù)字連線的歷史值。
從LabVIEW工具網(wǎng)絡(luò)獲取自定義探針
借用他人創(chuàng)建的探針來擴(kuò)展您的工具箱,。SAPHIR在LabVIEW工具網(wǎng)絡(luò)上提供了一系列免費(fèi)的自定義LabVIEW探針,。 您只需下載安裝VI軟件包管理器(VIPM)社區(qū)版(也是免費(fèi)的)、搜索ViBox,,再通過幾次單擊就可安裝探針,。
如果您正在使用LabVIEW 2011,您還可通過單擊LabVIEW入門指南窗口的“查找LabVIEW附加工具...”從LabVIEW工具網(wǎng)絡(luò)上獲取ViBox,。
圖4.使用VIPM安裝SAPHIR自定義探針,。
調(diào)用時(shí)掛起
許多LabVIEW程序架構(gòu)師甚至不知道LabVIEW具備該項(xiàng)功能。“調(diào)用時(shí)掛起”功能可將執(zhí)行掛起,,使您可以進(jìn)行以下任一或所有操作:
- 在VI運(yùn)行之前隨意更改VI的控件值,。
- VI返回調(diào)用程序時(shí)隨意更改顯示件的值。
- 重復(fù)運(yùn)行VI,,而無需將執(zhí)行返回至調(diào)用程序,。
- 完全跳過VI執(zhí)行,返回至調(diào)用VI,。
圖5. 在子VI節(jié)點(diǎn)設(shè)置窗口中,,選擇“調(diào)用時(shí)掛起”功能。
對于調(diào)用時(shí)掛起功能,,NI做了簡要說明,,見此處。 然而,,熟悉該功能的最佳方法還是親自動(dòng)手實(shí)踐,。
未連線的前面板控件和顯示件
為FIRST(崇尚發(fā)揚(yáng)科學(xué)技術(shù))機(jī)器人競賽團(tuán)隊(duì)推薦了一項(xiàng)技術(shù),這項(xiàng)技術(shù)對于專業(yè)的LabVIEW開發(fā)人員也非常有用
Ben建議在VI中添加前面板控件或顯示控件,,但并不與連線板連接,。 這些控件和顯示件與“調(diào)試”輸入或輸出工作方式類似,您可在測試時(shí)對其進(jìn)行手動(dòng)控制,。 這可使您更容易在應(yīng)用中生成偶然或極端事件,,而無需繁多的支持或仿真代碼的寫入。
您還可以在已建應(yīng)用程序中使用這些調(diào)試控件和顯示件,前提是LabVIEW應(yīng)用程序生成器包含了VI前面板,。
參閱LVMastery.com上的介紹,,進(jìn)一步了解Ben建議的調(diào)試子VI。
執(zhí)行跟蹤
如果其他方法都失敗的情況下,,有時(shí)您所能做的只有逐步跟蹤代碼,。 遇到此類問題時(shí),您可通過幾種方法在LabVIEW內(nèi)進(jìn)行執(zhí)行跟蹤,。
最明顯的方法是使用LabVIEW中內(nèi)置的“高亮顯示執(zhí)行”功能,,也稱為“燈泡”。 如果說探針是LabVIEW調(diào)試的首要工具,,燈泡則位列第二,。 但是,如果碰到復(fù)雜或是時(shí)間相關(guān)的漏洞,,您則可選擇其他更有效的工具,。
圖6. 執(zhí)行跟蹤功能比燈泡功能更多。
跟蹤磁盤或內(nèi)存
啟動(dòng)執(zhí)行跟蹤的一個(gè)簡單方法是在其中一個(gè)子VI中記錄一個(gè)連線值,。 您可編寫一個(gè)簡單的VI,,將該值記錄到文件中,或甚至可創(chuàng)建一個(gè)自定義探針來顯示連線的歷史值,。 通常通過這樣一個(gè)簡單的跟蹤您就可收集足夠的信息來幫助您找到漏洞的原因。
NI LabVIEW桌面執(zhí)行跟蹤工具包
如果要調(diào)試一個(gè)大型的高度并行應(yīng)用程序,,則包含NI開發(fā)者套件2011的LabVIEW桌面執(zhí)行跟蹤工具包就是您進(jìn)行LabVIEW代碼分析的“利器”,。 它可提供關(guān)于正在運(yùn)行的應(yīng)用程序的各種信息,包括詳細(xì)的內(nèi)存分配和再分配,、事件生成,、由代碼定義的自定義信息。Austin LabVIEW程序架構(gòu)師論壇的創(chuàng)建人之一Fabiola De la Cueva指出該工具包可用于調(diào)試已崩潰的應(yīng)用程序,,因?yàn)樗仟?dú)立于LabVIEW之外運(yùn)行的,。
圖7. 手動(dòng)執(zhí)行追蹤具有風(fēng)險(xiǎn)(圖片采自O(shè)liver Widder)
專業(yè)的LabVIEW開發(fā)人員很慶幸,因?yàn)長abVIEW桌面執(zhí)行跟蹤工具包已包含在NI開發(fā)者套件2011之中,,不會(huì)產(chǎn)生額外的費(fèi)用,。
單元測試
測試驅(qū)動(dòng)開發(fā)(TDD) 是一種軟件工程技術(shù),可幫助您從頭創(chuàng)建更好的代碼,,同時(shí)它也是幫助您調(diào)試現(xiàn)有代碼的一個(gè)有效工具,。
在TDD中,當(dāng)您發(fā)現(xiàn)應(yīng)用程序存在漏洞時(shí),,調(diào)試流程的第一個(gè)步驟就是創(chuàng)建一個(gè)可重現(xiàn)漏洞并導(dǎo)致測試失敗的單元測試,。只有到那時(shí)候,您才確實(shí)可以開始嘗試修復(fù)問題。 如果單元測試通過,,則表明您已清除了該漏洞,。
圖8. 你在哪里測試代碼?
這種漏洞修復(fù)方法需要費(fèi)點(diǎn)時(shí)間,,但是相比其他較不精確的方法,,它具有以下幾個(gè)優(yōu)點(diǎn):
- 單元測試具有可追溯性,可完整顯示漏洞的發(fā)生過程以及您如何將漏洞隔離
- 您或其他開發(fā)者可隨時(shí)輕松驗(yàn)證或重新驗(yàn)證您的修復(fù),,而無需記住激活漏洞的詳細(xì)信息,。
- 單元測試可在您的項(xiàng)目中與其他測試一起自動(dòng)執(zhí)行,因此漏洞如果再次出現(xiàn),,您可以立即知曉,。
針對單元測試有兩個(gè)主要的LabVIEW附加工具,TDD方法可以與另一個(gè)一同使用,。 查看JKI的免費(fèi)VI測試儀LabVIEW附加工具或參閱Eli Kerry的LabVIEW軟件工程指南,,進(jìn)一步解LabVIEW單元測試框架工具包,它已包含在NI開發(fā)者套件之內(nèi),。