다음을 통해 공유


.step_filter(단계 필터 설정)

.step_filter 명령은 추적할 때 건너뛰는(단계별 실행) 함수 목록을 만듭니다. 이렇게 하면 코드를 추적하고 특정 함수만 건너뛸 수 있습니다. 한 줄에 여러 함수 호출이 있는 경우 소스 모드에서 스테이핑을 제어하는 데 사용할 수도 있습니다.

.step_filter "FilterList" 
.step_filter /c 
.step_filter 

매개 변수

"FilterList"
단계별 실행될 함수와 연결된 기호를 지정합니다. FilterList 는 세미콜론으로 구분된 여러 텍스트 패턴을 포함할 수 있습니다. 이러한 각 패턴에는 다양한 와일드카드 및 지정자가 포함될 수 있습니다. 자세한 내용은 문자열 와일드카드 구문을 참조하세요. 이러한 패턴 중 하나 이상과 일치하는 기호가 추적 중에 단계별 실행되는 함수입니다. "FilterList"를 사용할 때마다 이전 필터 목록이 삭제되고 새 목록으로 완전히 바뀝니다.

/c
필터 목록을 지웁니다.

환경

항목 설명
모드 사용자 모드, 커널 모드
대상 라이브, 크래시 덤프
플랫폼 모두

설명

매개 변수 가 없으면 .step_filter 현재 필터 목록을 표시합니다.

일반적으로 추적 명령(예: t 또는 windbg 디버그 | 단계별 실행] 은 함수 호출로 추적됩니다. 그러나 호출되는 함수와 연결된 기호가 FilterList에서 지정한 패턴과 일치하면 단계 명령(예: p)이 사용된 것처럼 함수가 스텝오버됩니다.

명령 포인터가 필터 목록에 나열된 코드 내에 있으면 gu 명령 또는 WinDbg 프로시저 나가기 단추와 같은 추적 또는 단계 명령이 이 함수에서 한 단계씩 실행됩니다. 물론 이 필터는 이러한 코드가 처음에 추적되지 않도록 하므로 필터를 변경하거나 중단점에 도달한 경우에만 발생합니다.

예를 들어 다음 명령을 사용하면 추적 명령이 모든 CRT 호출을 건너뜁니다.

.step_filter "msvcrt!*" 

.step_filter 명령은 단일 소스 줄에 여러 함수 호출이 있을 수 있으므로 소스 모드에서 디버깅할 때 가장 유용합니다. p t 명령은 이러한 함수 호출을 구분하는 데 사용할 수 없습니다.

예를 들어 다음 줄에서 t 명령은 GetTickCount와 printf 둘 다로 단계별로 실행되고 p 명령은 두 함수 호출을 모두 단계별로 실행합니다.

printf( "%x\n", GetTickCount() );

.step_filter 명령을 사용하면 다른 호출을 추적하면서 이러한 호출 중 하나를 필터링할 수 있습니다.

함수는 기호로 식별되므로 단일 필터에 전체 모듈이 포함될 수 있습니다. 이렇게 하면 프레임워크 함수(예: MFC(Microsoft Foundation Classs) 또는 ATL(Active Template Library) 호출)을 필터링할 수 있습니다.

어셈블리 모드에서 디버깅할 때 각 호출은 다른 줄에 있으므로 단계별 또는 추적 행을 선택할 수 있습니다. 따라서 .step_filter 어셈블리 모드에서는 그리 유용하지 않습니다.