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