工具輔助: 使用 Rational PurifyPlus 工具分析執行時期效能(Windows 和 UNIX)
這項工具輔助說明如何使用 Rational PurifyPlus 工具來實現無記憶體錯誤和洩漏、能最有效使用記憶體,且提供最佳效能的程式碼。
工具: Rational PurifyPlus
關係
主要說明

這項工具輔助適用於 Microsoft Windows 系統和和 UNIX 系統。

PurifyPlus 工具包括 Rational Purify、Rational PureCoverage 和 Rational Quantify。

書籍圖示如果要進一步瞭解 PurifyPlus 工具,請閱讀 PurifyPlus 的入門手冊(Windows 版本或 UNIX 版本)。

說明書籍圖示如果需要使用 PurifyPlus 工具的逐步資訊,請參閱工具的線上說明。

執行時期效能分析

執行時期效能的分析包含下列各項:

  • 偵測記憶體錯誤和洩漏(Windows 和 UNIX 中的 C/C++ 程式)。
    • 請利用 Purify 來確定這些問題,您自己的程式碼和軟體所用的元件都包括在內,即使您沒有程式檔也一樣。
    • 請利用 PureCoverage 來確定已涵蓋所有程式碼。(您也可以在 Purify 之外,獨立使用 PureCoverage 來收集 C/C++、Java 和 .NET 受管理程式碼的涵蓋面資料。)
  • 記憶體用量概況(Windows 中的 Java 和 .NET 受管理程式碼)。 請利用 Purify 來顯示記憶體使用效率不好之處。
  • 效能概況(Windows 和 UNIX)。 請利用 Quantify 來顯示您的程式在哪裡花最多時間,以便消除主要的效能瓶頸。

PurifyPlus 工具的執行時期分析會產生執行效率最好的無錯誤程式碼。

工具步驟

如果要利用 PurifyPlus 工具來進行執行時期分析,請執行下列動作:

1. 在 Purify 之下執行程式,以收集錯誤、洩漏和涵蓋率資料(Windows 和 UNIX 中的 C/C++ 程式) 

Purify 會偵測出很不容易尋找的執行時期錯誤,其中包括您自己的程式碼和您的軟體所用的元件中之記憶體洩漏。它會報告各種記憶體錯誤,如陣列界限錯誤、利用懸掛指標進行存取、未起始設定的記憶體讀取,記憶體配置錯誤和記憶體洩漏,以便在它們造成損害之前,便加以解決。如果您的系統有 Rational PureCoverage,您也可以見到程式碼已測試和未測試的部分。 

首先,請在 Purify 之下執行您的程式:

  • 在 Windows 系統中:
    • 如果您在 Microsoft Visual Studio 6 中作業,請先選取 Visual Studio 功能表項目:Purify > 進行 Purify 整合。如果您的系統有 PureCoverage,請同時選取 Purify > 收集涵蓋率資料來監視程式碼涵蓋率。之後,再依照正常方式,在 Visual Studio 中執行您的程式。
    • 如果您將 Purify 當作獨立程式來使用,而未整合 Visual Studio,請選取檔案 > 執行。在「執行程式」對話框中,選取收集錯誤、洩漏和涵蓋率資料(如果您的系統沒有 PureCoverage,就是收集錯誤和洩漏資料),再執行您的程式。
  • 在 UNIX 系統上,增加一個字:purify. 請將這個加到編譯/鏈結行的開頭。 如果系統上有 PureCoverage,請再加上 purecov 。例如:
    % purify purecov cc -g hello_world.c
    之後,再依照正常方式來執行程式。
當您操作程式時,Purify 會在 Purify 檢視器中列出執行時期錯誤。當您結束程式時,Purify 會報告記憶體洩漏。

請掃描訊息標頭來識別嚴重錯誤。請展開訊息來更詳細的診斷資訊,其中包括產生錯誤的程式碼。您可以從檢視器中,在編輯器開啟程式碼,進入發生錯誤的那一行來直接更正。

更正錯誤並重建程式之後,請執行更新的程式,比較新結果和前一次的執行結果來驗證您的更正。請重複監控、執行、分析及更正的循環,直到程式執行無誤為止。

如果您收集了程式執行的涵蓋率資料,您也可以見到尚未檢查錯誤的程式碼部分。請利用這項資訊來調整執行時期分析的範圍,以便找出程式中發生在任何位置的所有錯誤。

說明書籍圖示 如果需要詳細資訊,請在 Purify 線上說明索引中,查閱下列主題:

  • 執行程式
  • Purify 訊息
  • 程式碼
  • 涵蓋率資料

2. 在 Purify 之下執行程式,以偵測效率不好的記憶體用量(Windows 中的 Java 和 .NET 受管理程式碼) 

Purify 可協助您識別 Java 和 .NET 受管理程式碼記憶體問題。您可以利用 Purify 來判斷:

  • 您的程式使用多少記憶體
  • 您的程式為了一組特定動作,消耗了多少新的記憶體
  • 您的程式中哪些方法和物件消耗這麼多記憶體
  • 哪些物件可能妨礙不必要的物件之記憶體回收作業
  • 哪裡比較適合強迫記憶體回收來改進效能
首先,請在 Purify 之下執行您的程式。
  • 如果您在 Microsoft Visual Studio .NET、IBM WSWB 或 IBM WSS AD 中作業,請先選取功能表項目:PurifyPlus > Purify > 進行 Purify 整合。之後,再依照正常方式來執行程式。
  • 如果您將 Purify 當作獨立程式來使用,而未整合 Visual Studio .NET 或 WSWB/WSS AD,請在 Purify 使用者介面中,選取檔案 > 執行。在「執行程式」對話框中,選取收集記憶體效能分析資料,再執行您的程式。
在程式完成了起始設定程序之後,請利用 Purify Snapshot 指令來進行當時記憶體用量的基準性能測試。Snapshot 是探索程式在執行時如何使用記憶體的基礎。  

有了 Snapshot 之後,您便可以在程式執行時,擷取程式所用的記憶體記錄。請執行您懷疑洩漏記憶體的程式部分。Purify 會顯示一份記憶體配置圖來呈現現行記憶體使用情況的即時變異。當您觀察到配置的記憶體增加時,請再取得另一份 Snapshot。

請比較兩份 Snapshot 來識別可能造成記憶體洩漏的方法。請結束您的程式,比較這兩份 Snapshot(或找出「差異」)。Purify 會顯示一個呼叫曲線來呈現在程式執行時,在取得第一份和第二份 Snapshot 之間,消耗最大量配置記憶體的方法。您可以將焦點放在呼叫曲線內的特定方法,以便更精確探索它們。

如果配置給方法的記憶體量大到超出預期,請檢查您的程式碼(必要的話,修訂它),以便不再需要之時,將記憶體釋出。

識別了可能有記憶體問題的方法之後,請在物件層次分析這些方法。請尋找應該釋出及回收的記憶體,但因為其他物件仍有多餘參照指向它們,因而尚未釋出及回收記憶體的物件。 

說明書籍圖示 如果需要詳細資訊,請在 Purify 線上說明索引中,查閱下列項目:

  • 執行程式
  • 比較執行結果
  • 資料瀏覽器

3. 在 Quantify 之下執行程式,以尋找效能瓶頸(Windows 和 UNIX)。

Quantify 提供了程式及其元件的一組完整、準確而容易解釋的效能資料,因此,您可以識別和消除程式碼中的效能瓶頸。

首先,請在 Quantify 之下執行程式來收集效能資料:

  • 在 Windows 系統中:
    • 如果您在 Microsoft Visual Studio 6 中作業,請先選取 Visual Studio 功能表項目:Quantify > 進行 Quantify 整合。之後,再依照正常方式,在 Visual Studio 中執行您的程式。
    • 如果您在 Microsoft Visual Studio .NET、IBM WSWB 或 IBM WSS AD 中作業,請選取功能表項目:PurifyPlus > Quantify > 進行 Quantify 整合。之後,再依照正常方式來執行您的程式。
    • 如果您將 Quantify 當作獨立程式來使用,而未整合 Visual Studio 或 WSWB/WSS AD,請在 Quantify 使用者介面中,選取檔案  >  執行來執行您的程式。
  • 在 UNIX 系統中,將 quantify 一字加到編譯/鏈結行的開頭。例如:
         % quantify cc -g hello_world.c
    
    之後,再依照正常方式來執行程式。

當您操作您的程式碼時,Quantify 會記錄程式效能的相關資料,且會顯示它的執行緒和光纖活動。當您結束程式時,Quantify 會有精確的效能評估,供您尋找和診斷瓶頸。

Quantify 資料顯示畫面包含:

  • 「呼叫曲線」視窗,以圖形方式來顯示程式中各個函數的呼叫結構和效能
  • 可分類的「函數清單」視窗,列出所有函數及效能資料
  • 「函數詳細資料」視窗,顯示特定函數及其呼叫端和後代的資料
  • 「已註解的程式碼」視窗,顯示一份程式碼的逐行效能資料

收集好資料之後,您就能夠識別各種效能瓶頸,如無窮計算和重新計算、過早計算,或程式庫呼叫過量且成本過高。

修改程式碼來刪除瓶頸或將瓶頸最小化之後,請在 Quantify 之下,重新執行更新的程式。之後,再建立一份「差異」資料集來比較新結果和先前的執行結果,它會清楚指出效能的提升和退化。

如果需要詳細資訊,請在 Quantify 線上說明索引中,查閱下列主題:

  • 執行程式
  • 比較執行結果
  • 呼叫曲線視窗
  • 已註解的程式碼視窗