以 LabWindows/CVI 偵測記憶體洩漏 (Memory Leak)

內容

介紹

C 程式設計語言的強項之一,即是能夠讓工程師以低階控制功能,進行程式碼的最佳化。由於 C 程式設計語言可直接存取應用的記憶體,並呼叫特定硬體的功能,因此工程師較能夠掌控程式大小與執行速度。

卻也因為 C 的功能與彈性,以致於許多教科書均探討記憶體管理作業的複雜性。其中 1 本教科書即提到:

記憶體的存取、分配,與解除配置 (Deallocation) 作業,往往是造成錯誤與當機的主要原因。此種由記憶體引發的錯誤極難以解決……大多數的專業工程師均必須實際遇到相關問題,才能夠了解其原因。」

為了避免工程師於佈署應用之後才發現記憶體洩漏的情形,LabWindows/CVI 9.0 提供新的「資源追蹤視窗 (Resource Tracking Window)」工具,可讓工程師於開發過程中儘早發現並修正記憶體洩漏。

資源追蹤 (Resource Tracking) 視窗概述

在過去 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 視窗

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」欄位按下滑鼠右鍵,則將顯示下列選項的功能表:

  • Go to Source — 於「Source」視窗中強調資源所分配的位置。
  • View Memory — 開啟「Memory Display」視窗並顯示對應至所選項目的記憶體內容。
  • Break on Deallocation — 當釋放資源時,將指出 LabWindows/CVI 所暫停的程式。
  • Show/Hide Thread IDs— 於 Resource Tracking 視窗中顯示或隱藏「Thread ID」 欄位。
  • Clear Window — 從 Resource Tracking 視窗中移除所有的項目。
  • Load from File — 載入已儲存的檔案。
  • Save to File — 將 Resource Tracking 視窗的現有內容儲存為文字檔,以供稍後使用。
  • Sort — 開啟「Sort Tree」對話框,可於 Resource Tracking 視窗中進行資源排序。
  • Find — 開啟「Find」對話框,透過欄位搜尋相關內容。
  • Expand Resource — 展開資源種類。
  • Collapse Resource — 收攏資源種類。
  • Expand ALL — 展開所有資源種類。
  • Collapse ALL — 收攏所有資源種類。
  • Release Window/Confine Window — LabWindows/CVI 將根據 Resource Tracking 視窗是否處於「Window Confinement Region」中,顯示不同的選項。「Release Window」指令將從 Window Confinement Region 中移除視窗。「Confine Window」指令將限制視窗至 Window Confinement Region 中。

若對 Resource Tracking 視窗的「Stack Trace」區塊按下滑鼠右鍵,則將顯示下列選項的功能表:

  • Go to Source — 於「Source」視窗中強調所選函式的位置。
  • Find — 開啟「Find」對話框,透過欄位搜尋相關內容。

若對 Resource Tracking 視窗的分頁標籤按下滑鼠右鍵,則將顯示下列選項的功能表:

  • Close — 關閉視窗。
  • Release Window — 從「Debugging Region」中移除視窗。

由於資源追蹤功能將對系統造成額外的負載,因此若啟用該功能將或多或少影響程式的效能。

 

更多資源

體驗 LabWindows/CVI

LabWindows/CVI 開發季刊
可參閱最新的線上教學、開發訣竅、小技巧,與後續主題。

Was this information helpful?

Yes

No