C 程式設計語言的強項之一,即是能夠讓工程師以低階控制功能,進行程式碼的最佳化。由於 C 程式設計語言可直接存取應用的記憶體,並呼叫特定硬體的功能,因此工程師較能夠掌控程式大小與執行速度。
卻也因為 C 的功能與彈性,以致於許多教科書均探討記憶體管理作業的複雜性。其中 1 本教科書即提到:
記憶體的存取、分配,與解除配置 (Deallocation) 作業,往往是造成錯誤與當機的主要原因。此種由記憶體引發的錯誤極難以解決……大多數的專業工程師均必須實際遇到相關問題,才能夠了解其原因。」
為了避免工程師於佈署應用之後才發現記憶體洩漏的情形,LabWindows/CVI 9.0 提供新的「資源追蹤視窗 (Resource Tracking Window)」工具,可讓工程師於開發過程中儘早發現並修正記憶體洩漏。
在過去 10 多年來,LabWindows/CVI 早已提供自動化的陣列功能,以找出可能造成意外動作的記憶體錯誤。以非 C 語言標準配備的進階使用者保護功能為基礎,LabWindows/CVI 現在更提供 Resource Tracking Window 的整合式工具,可找出降低系統效能的潛在因素。
新的 Resource Tracking Window 僅限 LabWindows/CVI 完整版開發系統與開發套餐 (Developer Suite) 提供,可記錄並追蹤執行期間的所有相關資源,包含動態記憶體、檔案控制代碼 (File handle)、面板、GPIB/TCP 控制代碼,與執行緒集區 (Pool)。透過此項工具,即可輕鬆取得來源程式碼、檢視記憶體、中斷解除配置 (Deallocation),並將追蹤的資源記錄至磁碟以進行後續檢視。
使用者可至「Build Options」對話框的「Debugging Options」區塊中,選擇「Extended」以啟用互動式的資源追蹤功能。亦可至公用程式庫 (Utility Library) 中使用「GetEnableResourceTracking」與「SetEnableResourceTracking」函式,以程式設計的方式啟用/停用資源追蹤功能。
Resource Tracking 視窗的「Resources」欄,將同時顯示程式中的分配與解除配置資源。LabWindows/CVI 將以紅色文字顯示剛分配完畢的資源,黑色文字代表現有的分配資源,而灰色文字為剛釋放的資源。資源亦可根據類型進行群組分類,如記憶體、工具箱 (Toolbox)、使用者介面資源,還有更多。連續點選「Resources」欄中的資源 2 次,可直接得知該資源所分配的來源程式碼位置。當分配資源時,Resource Tracking 視窗的「Stack Trace」則可顯示函式的呼叫堆疊 (Call stack);而該筆清單頂端為最近呼叫的函式,底端為初始函式。
不論是延伸或標準的除錯階層,均可使用資源追蹤功能。使用者可至「Build Options」對話框的「Debugging Options」區塊中,選擇「Extended」即可啟用預設的資源追蹤功能。若選擇「Standard」,則必須使用「SetEnableResourceTracking」函式啟用資源追蹤。
若要檢視 Resource Tracking 視窗,則可於 LabWindows/CVI 視窗中點選「Window » Resource Tracking」。若對 Resource Tracking 視窗的「Resources」欄位按下滑鼠右鍵,則將顯示下列選項的功能表:
若對 Resource Tracking 視窗的「Stack Trace」區塊按下滑鼠右鍵,則將顯示下列選項的功能表:
若對 Resource Tracking 視窗的分頁標籤按下滑鼠右鍵,則將顯示下列選項的功能表:
由於資源追蹤功能將對系統造成額外的負載,因此若啟用該功能將或多或少影響程式的效能。
LabWindows/CVI 開發季刊
可參閱最新的線上教學、開發訣竅、小技巧,與後續主題。