使用靜態驅動程式驗證器報告
SDV 報告是驗證結果的互動式顯示。 本節說明如何使用 SDV 報告在驅動程式中找出編碼錯誤。 如需報表、視窗的功能和視窗中元素的詳細資訊,請參閱 靜態驅動程式驗證器報告。
開啟靜態驅動程式驗證器瑕疵檢視器
如果 SDV 在 [ 結果 ] 窗格中回報任何「瑕疵」 (規則違規) ,您可以在 [靜態驅動程式驗證器報告] 的 [ 瑕疵檢視器 ] 視窗中檢視與違規相關的程式碼。 [瑕疵檢視器] 視窗會顯示規則違規路徑中的程式碼。 違反的每個規則都有一個 [瑕疵檢視器 ] 視窗, (您一次只能檢視一個 [瑕疵檢視器 ] 視窗) 。
若要開啟瑕疵品的 [瑕疵檢視器] 視窗:
- 從 [ 瑕疵 (s) ] 節點底下的清單中選取規則。
此程式僅適用于瑕疵。 如果驗證的結果不是瑕疵品,SDV 不會產生 瑕疵檢視器 視窗,例如通過、逾時、空格、不適用或任何其他非瑕疵結果。
下列螢幕擷取畫面顯示靜態驅動程式驗證器報表頁面。
檢閱規則
嘗試在程式碼中尋找規則違規之前,請先熟悉驅動程式違反的規則。
靜態驅動程式驗證程式規則一節包含一個主題,說明每個規則,例如CancelSpinLock。
若要查看規則的程式碼,請在靜態驅動程式驗證程式報告的 [ 原始程式碼 ] 窗格中,按一下具有規則程式碼的索引標籤,例如 CancelSpinLock.slic。
例如,如果驅動程式呼叫IoAcquireCancelSpinLock或IoReleaseCancelSpinLock,或驅動程式在釋放微調鎖定之前結束常式,則會違反CancelSpinLock規則。
追蹤瑕疵路徑
當 [ 瑕疵檢視器] 視窗開啟時,會選取 [ 追蹤樹狀結構] 窗格中代表瑕疵路徑中第一個重要驅動程式呼叫的專案。 在 [ 原始程式碼] 窗格中,原始程式碼的相關行會以藍色醒目提示。
下列螢幕擷取畫面顯示Fail_Driver1範例驅動程式違反CancelSpinLock規則的靜態驅動程式驗證器瑕疵檢視器視窗開啟檢視。 在此範例中,違反 CancelSpinLock 規則之路徑中的第一個驅動程式呼叫是呼叫驅動程式DispatchSystemControl常式中的IoAcquireCancelSpinLock。
使用原始程式碼窗格
[ 原始程式碼] 窗格 會顯示驗證中使用的原始程式檔。 選取 [ 追蹤樹狀結構] 窗格中的專案時,與元素相關聯的原始程式碼檔案會出現在相鄰 [ 原始程式碼 ] 窗格中的檔案堆疊頂端。 若要查看不同的原始程式檔,請按一下 [原始程式碼] 窗格中來源檔案的索引 卷 標。
下列螢幕擷取畫面顯示 [原始程式碼] 窗格。 在此 [原始程式碼] 窗格中,以淡藍色反白醒目提示的程式程式碼,是與 [追蹤樹狀結構 ] 窗格中所選取元素相關聯的程式程式碼。
驅動程式程式碼中執行于瑕疵品路徑中的行會顯示在紅色文字中。 只要查看此範例中的第 116 行和 118 行紅色文字,您有時會看到瑕疵,特別是類似此範例中使用的簡單瑕疵。 在此情況下,驅動程式會取得微調鎖定,然後從分派常式傳回,而不會釋放微調鎖定。
逐步執行追蹤
若要開始追蹤,請在 [ 追蹤樹狀結構] 窗格中選取元素,然後按向下鍵。 每次按下向下鍵時,都會選取 [ 追蹤樹狀結構] 窗格中的下一個專案。
當您逐步執行[追蹤樹狀結構]窗格中的元素時,watch驅動程式程式碼中專案的[原始程式碼] 窗格。 若要展開程式碼折迭區段,請按向右鍵。 若要折迭已展開的程式碼區段,請按向左鍵。 游標會略過所有折迭的程式碼區段。
當您向下捲動 [ 追蹤樹狀結構 ] 窗格中的元素時,選取元素的來源原始程式碼檔案會移至 原始程式碼窗格中檔案 堆疊的頂端,並醒目提示相關聯的程式程式碼。
下列螢幕擷取畫面顯示具有 [追蹤樹狀目錄] 和 [原始程式碼] 窗格的 [靜態驅動程式驗證器瑕疵檢視器]。
使用規則檔案和狀態窗格
您可以使用 [狀態窗格 ] 來檢視布林運算式集,這些運算式代表 SDV 在驗證期間追蹤的變數值。
[ 狀態 ] 窗格中顯示的布林運算式是該集合中評估為 TRUE的運算式。 如果 [追蹤樹狀結構] 窗格中的 元素變更任何運算式的值, 狀態 窗格的內容就會變更,以顯示評估為 TRUE的新運算式集。
當您逐步執行 [追蹤樹狀結構] 窗格時,您可以觀察 SDV 如何使用這些變數的值來評估規則檔案中所使用的運算式, (*.slic) 。
[靜態驅動程式驗證器報告] 頁面的下列螢幕擷取畫面顯示 SDV 測試如何指出驅動程式先前是否已取得微調鎖定。 SDV 測試以查看驅動程式先前是否已取得微調鎖定,也就是說,如果 s 變數的值是 1,表示鎖定。 在此情況下, s!=1 (解除鎖定) ,如 [ 狀態] 窗格中所示,因此 SDV 會將 的值 設定為1,表示已取得鎖定。
尋找 ABORT 常式
當驅動程式程式碼違反規則時, [追蹤樹狀結構] 窗格會包含 一個 ABORT 常式來報告瑕疵。
當瑕疵品的程式碼路徑很長且複雜時,通常最好在 [ 追蹤樹狀結構 ] 窗格中向下捲動,直到您找到 ABORT 常式,然後使用向上鍵來尋找最立即觸發瑕疵報表的程式碼。
例如,如下列螢幕擷取畫面所示,ABORT 常式會與 CancelSpinLock.slic 檔案中的一行相關聯,該行會在測試是否 (s==locked) 取得鎖定之後回報瑕疵。 測試是分派常式結束時執行的副程式之一部分。 從這項資訊中,您可以推斷驅動程式無法在從分派常式傳回之前釋放微調鎖定。
關閉靜態驅動程式驗證器瑕疵檢視器
識別造成瑕疵的程式碼錯誤之後,您可以關閉目前規則的 [靜態驅動程式驗證器瑕疵檢視器 ] 視窗,然後針對不同的規則開啟 [ 瑕疵檢視器 ]。
若要關閉規則的瑕疵檢視器:
- 從 [ 檔案] 功能表中,選取 [ 結束]。
您也可以按一下 [瑕疵檢視器] 的 [關閉] 按鈕 (X) 。 它位於靜態驅動程式驗證器報告的 [ 關閉 ] 按鈕下方, (X) 。
下列螢幕擷取畫面顯示如何關閉瑕疵檢視器。