정적 드라이버 검증 도구 보고서 사용
SDV 보고서는 확인 결과의 대화형 디스플레이입니다. 이 섹션에서는 SDV 보고서를 사용하여 드라이버에서 코딩 오류를 찾는 방법을 설명합니다. 보고서, 창의 기능 및 창의 요소에 대한 자세한 내용은 정적 드라이버 검증 도구 보고서를 참조하세요.
정적 드라이버 검증 도구 결함 뷰어 열기
SDV가 결과 창에서 "결함"(규칙 위반)을 보고한 경우 정적 드라이버 검증 도구 보고서의 결함 뷰어 창에서 위반과 관련된 코드를 볼 수 있습니다. 결함 뷰어 창에는 규칙 위반 경로에 코드가 표시됩니다. 위반된 각 규칙에 대해 하나의 결함 뷰어 창이 있습니다(한 번에 하나의 결함 뷰어 창만 볼 수 있음).
결함에 대한 결함 뷰어 창을 열려면 다음을 수행합니다.
- 목록에서 결함 노드 아래의 규칙을 선택합니다.
이 절차는 결함에 대해서만 작동합니다. 확인 결과가 결함(예: 통과, 시간 제한, 공간 제한, 해당 없음 또는 기타 결함 없음 결과)이 아닌 경우 SDV는 결함 뷰어 창을 생성하지 않습니다.
다음 스크린샷은 정적 드라이버 검증 도구 보고서 페이지를 보여 줍니다.
규칙 검토
코드에서 규칙 위반을 찾기 전에 드라이버가 위반한 규칙을 숙지합니다.
정적 드라이버 검증 도구 규칙 섹션에는 각 규칙(예: CancelSpinLock)을 설명하는 항목이 포함되어 있습니다.
규칙에 대한 코드를 보려면 정적 드라이버 검증 도구 보고서의 소스 코드 창에서 CancelSpinLock.slic과 같은 규칙 코드가 있는 탭을 클릭합니다.
예를 들어 드라이버가 IoAcquireCancelSpinLock 또는 IoReleaseCancelSpinLock을 순서대로 호출하거나 드라이버가 스핀 잠금을 해제하기 전에 루틴을 종료하는 경우 CancelSpinLock 규칙이 위반됩니다.
결함 경로 추적
결함 뷰어 창이 열리면 결함 경로의 첫 번째 중요 드라이버 호출을 나타내는 추적 트리 창의 요소가 선택됩니다. 소스 코드 창에서 연결된 소스 코드 줄이 파란색으로 강조 표시됩니다.
다음 스크린샷은 Fail_Driver1 샘플 드라이버의 CancelSpinLock 규칙 위반에 대한 정적 드라이버 검증 도구 결함 뷰어 창의 여는 보기를 보여 줍니다. 이 예제에서 CancelSpinLock 규칙 위반 경로의 첫 번째 드라이버 호출은 드라이버의 DispatchSystemControl 루틴에서 IoAcquireCancelSpinLock에 대한 호출입니다.
소스 코드 창 사용
소스 코드 창에는 확인에 사용된 원본 파일이 표시됩니다. 추적 트리 창의 요소를 선택하면 요소와 연결된 소스 코드 파일이 인접한 소스 코드 창의 파일 스택 맨 위에 나타납니다. 다른 원본 파일을 보려면 소스 코드 창에서 원본 파일의 탭을 클릭합니다.
다음 스크린샷은 소스 코드 창을 보여줍니다. 이 소스 코드 창에서 옅은 파란색으로 강조 표시된 코드 줄은 추적 트리 창에서 선택한 요소와 연결된 줄입니다.
결함 경로에서 실행되는 드라이버 코드의 줄은 빨간색 텍스트로 표시됩니다. 이 예제에서 줄 116 및 118과 같은 빨간색 텍스트 줄만 보면 결함, 특히 이 예제에 사용된 것과 같은 간단한 결함을 볼 수 있습니다. 이 경우 드라이버는 스핀 잠금을 획득한 다음 스핀 잠금을 해제하지 않고 디스패치 루틴에서 반환합니다.
추적 단계별 실행
추적을 시작하려면 추적 트리 창에서 요소를 선택한 다음 아래쪽 화살표 키를 누릅니다. 아래쪽 화살표를 누를 때마다 추적 트리 창의 다음 요소가 선택됩니다.
추적 트리 창에서 요소를 단계별로 실행하면 드라이버 코드의 요소에 대한 소스 코드 창을 watch. 코드의 축소된 섹션을 확장하려면 오른쪽 화살표 키를 누릅니다. 코드의 확장된 섹션을 축소하려면 왼쪽 화살표 키를 누릅니다. 커서는 코드의 축소된 모든 섹션을 건너뜁니다.
추적 트리 창의 요소를 아래로 스크롤하면 선택한 요소가 시작되는 소스 코드 파일이 소스 코드 창의 파일 스택 맨 위로 이동하고 연결된 코드 줄이 강조 표시됩니다.
다음 스크린샷에서는 추적 트리 및 소스 코드 창이 있는 정적 드라이버 검증 도구 결함 뷰어를 보여 줍니다.
규칙 파일 및 상태 창 사용
상태 창을 사용하여 확인 중에 SDV가 추적하는 변수의 값을 나타내는 부울 식 집합을 볼 수 있습니다.
상태 창에 표시되는 부울 식은 TRUE로 평가되는 해당 집합의 식입니다. 추적 트리 창의 요소가 식의 값을 변경하면 상태 창의 내용이 변경되어 TRUE로 계산되는 새 식 집합이 표시됩니다.
추적 트리 창을 단계별로 실행하면 SDV가 이러한 변수의 값을 사용하여 규칙 파일(*.slic)에 사용되는 식을 평가하는 방법을 관찰할 수 있습니다.
정적 드라이버 검증 도구 보고서 페이지의 다음 스크린샷은 SDV 테스트에서 드라이버가 이전에 스핀 잠금을 획득했는지 여부를 나타내는 방법을 보여 줍니다. SDV는 드라이버가 이전에 스핀 잠금을 획득했는지, 즉 변수 값 이 1이면 잠겨 있는지 테스트합니다. 이 경우 s!=1(잠금 해제됨)이 상태 창에 표시되므로 SDV는 값을 1로 설정하여 잠금이 획득되었음을 나타냅니다.
중단 루틴 찾기
드라이버 코드가 규칙을 위반하면 추적 트리 창에 결함을 보고하기 위한 ABORT 루틴이 포함됩니다.
결함에 대한 코드 경로가 길고 복잡한 경우 ABORT 루틴을 찾을 때까지 추적 트리 창에서 아래로 스크롤한 다음 UP ARROW 키를 사용하여 결함 보고서를 가장 즉시 트리거한 코드를 찾는 것이 유용한 경우가 많습니다.
예를 들어 다음 스크린샷과 같이 ABORT 루틴은 잠금 획득 여부(s==locked)를 테스트한 후 결함을 보고하는 CancelSpinLock.slic 파일의 줄과 연결됩니다. 테스트는 디스패치 루틴이 종료될 때 수행되는 서브루틴의 일부입니다. 이 정보에서 드라이버가 디스패치 루틴에서 반환하기 전에 스핀 잠금을 해제하지 못했다고 유추할 수 있습니다.
정적 드라이버 검증 도구 결함 뷰어 닫기
결함을 일으킨 코드 오류를 식별한 후 현재 규칙에 대한 정적 드라이버 검증 도구 결함 뷰어 창을 닫은 다음 다른 규칙에 대한 결함 뷰어를 열 수 있습니다.
규칙에 대한 결함 뷰어를 닫려면 다음을 수행합니다.
- 파일 메뉴에서 끝내기를 선택합니다.
결함 뷰어의 닫기 단추(X)를 클릭할 수도 있습니다. 정적 드라이버 검증 도구 보고서의 닫기 단추(X) 바로 아래에 있습니다.
다음 스크린샷은 결함 뷰어를 닫는 방법을 보여줍니다.