다음을 통해 공유


ba(액세스 중단)

ba 명령은 프로세서 중단점(종종 덜 정확하게 데이터 중단점이라고 함)을 설정합니다. 이 중단점은 지정된 메모리에 액세스할 때 트리거됩니다.

사용자 모드

[~Thread] ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]

커널 모드

ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]

매개 변수

스레드
중단점이 적용되는 스레드를 지정합니다. 구문에 대한 자세한 내용은 스레드 구문을 참조 하세요. 사용자 모드에서만 스레드를 지정할 수 있습니다.

ID
중단점을 식별하는 선택적 숫자를 지정합니다. ID를 지정하지 않으면 사용 가능한 첫 번째 중단점 번호가 사용됩니다. ba와 ID 번호 사이에 공백을 추가할 수 없습니다. 각 프로세서는 제한된 수의 프로세서 중단점만 지원하지만 ID 번호 값에는 제한이 없습니다. ID를 대괄호([])로 묶으면 ID에 식이 포함될 수 있습니다. 구문에 대한 자세한 내용은 숫자 식 구문을 참조 하세요.

Access
중단점을 충족하는 액세스 유형을 지정합니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

옵션 작업

e (execute)

CPU가 지정된 주소에서 명령을 검색하면 디버거에 침입합니다.

r (읽기/쓰기)

CPU가 지정된 주소에서 읽거나 쓸 때 디버거에 침입합니다.

w (쓰기)

CPU가 지정된 주소에 쓰면 디버거에 침입합니다.

i (i/o)

(커널 모드만, x86 기반 시스템만 해당) 지정된 주소 의 I/O 포트에 액세스할 때 디버거에 침입합니다.

크기
액세스를 모니터링할 위치의 크기(바이트)를 지정합니다. x86 기반 프로세서에서 이 매개 변수는 1, 2 또는 4일 수 있습니다. 그러나 Access가 e같으면 크기1이어야 합니다.

x64 기반 프로세서에서 이 매개 변수는 1, 2, 4 또는 8일 수 있습니다. 그러나 Access가 e같으면 크기1이어야 합니다.

옵션 중단점 옵션을 지정합니다. 표시된 경우를 제외하고 다음 옵션 중 원하는 수만큼 사용할 수 있습니다.

/1
"원샷" 중단점을 만듭니다. 이 중단점이 트리거되면 중단점이 중단점 목록에서 영구적으로 제거됩니다.

/pEProcess
(커널 모드에만 해당) 이 중단점과 연결된 프로세스를 지정합니다. EProcess는 PID가 아닌 EPROCESS 구조체의 실제 주소여야 합니다. 중단점은 이 프로세스의 컨텍스트에서 발생한 경우에만 트리거됩니다.

/tEThread
(커널 모드에만 해당) 이 중단점과 연결된 스레드를 지정합니다. EThread 는 스레드 ID가 아니라 ETHREAD 구조의 실제 주소여야 합니다. 중단점은 이 스레드의 컨텍스트에서 발생한 경우에만 트리거됩니다. /pEProcess/tEThread를 사용하는 경우 두 순서로 입력할 수 있습니다.

/cMaxCallStackDepth
호출 스택 깊이가 MaxCallStackDepth보다 작은 경우에만 중단점이 활성화되도록 합니다. 이 옵션을 /C함께 결합할 수 없습니다.

/CMinCallStackDepth
호출 스택 깊이가 MinCallStackDepth보다 큰 경우에만 중단점이 활성화되도록 합니다. 이 옵션을 /c함께 결합할 수 없습니다.

/w dx 개체 식 dx 개체 식 에서 반환된 부울 값을 기반으로 조건부 중단점을 설정합니다. 인수는 true(조건 일치 – 중단) 또는 false(조건과 일치하지 않음 - 중단 안 함)로 평가되는 데이터 모델(dx) 식입니다.

다음은 globalVariable 값을 기반으로 조건부 중단점을 설정하는 예제입니다. 예를 들어 액세스 중단점은 디버거가 중단되어야 하는지 여부를 결정할 때 작성된 값을 검사 수 있습니다.

ba w 4 /w "mymodule!globalVariable == 4" mymodule!globalVariable

이 예제에서는 JavaScript를 사용하여 중단점을 설정하는 방법을 보여줍니다.

ba w 4 /w "@$scriptContents.myFunc(mymodule!globalVariable)" mymodule!globalVariable

디버거 개체 에 대한 자세한 내용은 dx(디버거 개체 모델 식 표시)를 참조하세요.

조건부 중단점에 대한 자세한 내용은 조건부 중단점 설정을 참조하세요.

주소
유효한 주소를 지정합니다. 애플리케이션이 이 주소의 메모리에 액세스하는 경우 디버거는 실행을 중지하고 모든 레지스터 및 플래그의 현재 값을 표시합니다. 이 주소는 오프셋이어야 하며 Size 매개 변수와 일치하도록 적절하게 정렬되어야 합니다. (예:크기는 4이고 주소 는 4의 배수여야 합니다.) 주소를 생략하면 현재 명령 포인터가 사용됩니다. 구문에 대한 자세한 내용은 주소 및 주소 범위 구문을 참조 하세요.

전달
중단점이 활성화될 때까지 중단점이 전달되는 횟수를 지정합니다. 이 숫자는 16비트 값일 수 있습니다. 프로그램 카운터가 중단 없이 이 지점을 통과하는 횟수는 이 숫자의 값보다 1보다 작습니다. 따라서 이 숫자를 생략하는 것은 1로 설정하는 것과 같습니다. 또한 이 숫자는 애플리케이션 이 이 시점을 지나서 실행되는 횟수만 계산합니다 . 이 지점을 지나서 단계별 실행 또는 추적은 계산되지 않습니다. 전체 개수에 도달한 후에는 중단점을 지우고 다시 설정해야만 이 숫자를 다시 설정할 수 있습니다.

CommandString
중단점이 지정된 횟수를 발견할 때마다 실행할 명령 목록을 지정합니다. 이러한 명령은 t(추적) 또는 p(단계) 명령 대신 g(Go) 명령을 실행한 후에 중단점이 적중된 경우에만 실행됩니다. CommandString디버거 명령에는 매개 변수가 포함될 수 있습니다.

이 명령 문자열을 따옴표로 묶어야 하며 여러 명령을 세미콜론으로 구분해야 합니다. 표준 C 컨트롤 문자(예: \n\")를 사용할 수 있습니다. 두 번째 수준 따옴표(\")에 포함된 세미콜론은 포함된 따옴표 문자열의 일부로 해석됩니다.

이 매개 변수는 선택 사항입니다.

환경

항목 설명
모드 사용자 모드, 커널 모드
대상 라이브 디버깅만
플랫폼 all

추가 정보

프로세서 중단점에 대한 자세한 내용은 프로세서 중단점(ba 중단점)을 참조하세요. 중단점 사용에 대한 자세한 내용과 예제, 중단점을 제어하는 다른 중단점 명령 및 메서드, 커널 디버거에서 사용자 공간에 중단점을 설정하는 방법에 대한 자세한 내용은 중단점 사용을 참조 하세요. 조건부 중단점에 대한 자세한 내용은 조건부 중단점 설정을 참조하세요.

설명

디버거는 ID 번호를 사용하여 이후 bc(중단점 지우기), bd(중단점 사용 안 함) be(중단점 사용) 명령의 중단점을 참조합니다.

Bl(중단점 목록) 명령을 사용하여 모든 기존 중단점, 해당 ID 번호 및 해당 상태 나열합니다.

.bpcmds(중단점 명령 표시) 명령을 사용하여 기존 중단점, 해당 ID 번호 및 이를 만드는 데 사용된 명령을 모두 나열합니다.

각 프로세서 중단점에는 연결된 크기가 있습니다. 예를 들어 w(쓰기) 프로세서 중단점은 4바이트의 크기로 주소 0x70001008 설정할 수 있습니다. 이렇게 하면 0x70001008 0x7000100B 주소 블록을 모니터링합니다. 이 메모리 블록이 기록되면 중단점이 트리거됩니다.

프로세서가 지정된 영역과 겹치지만 동일하지 않은 메모리 영역에서 작업을 수행하는 경우 발생할 수 있습니다. 이 예제에서는 0x7000100F 0x70001000 범위를 포함하는 단일 쓰기 작업 또는 0x70001009 바이트만 포함하는 쓰기 작업은 겹치는 작업입니다. 이러한 상황에서 중단점이 트리거되는지 여부는 프로세서에 따라 달라집니다. 특정 세부 정보는 프로세서 설명서를 참조해야 합니다. 하나의 특정 인스턴스를 사용하려면 x86 프로세서에서 액세스된 범위가 중단점 범위와 겹칠 때마다 읽기 또는 쓰기 중단점이 트리거됩니다.

마찬가지로 주소 0x00401003 e (실행) 중단점이 설정된 다음 주소 0x00401002 0x00401003 걸쳐 있는 2 바이트 명령이 실행되면 결과는 프로세서에 따라 달라집니다. 다시 한 번 자세한 내용은 프로세서 아키텍처 설명서를 참조하세요.

프로세서는 사용자 모드 디버거에서 설정한 중단점과 커널 모드 디버거에서 설정한 중단점을 구분합니다. 사용자 모드 프로세서 중단점은 커널 모드 프로세스에 영향을 주지 않습니다. 커널 모드 프로세서 중단점은 사용자 모드 코드가 디버그 레지스터 상태를 사용하는지 여부와 연결된 사용자 모드 디버거가 있는지 여부에 따라 사용자 모드 프로세스에 영향을 줄 수도 있고 영향을 미치지 않을 수도 있습니다.

현재 프로세스의 기존 데이터 중단점을 다른 레지스터 컨텍스트에 적용하려면 .apply_dbp(컨텍스트에 데이터 중단점 적용) 명령을 사용합니다.

다중 프로세서 컴퓨터에서 각 프로세서 중단점은 모든 프로세서에 적용됩니다. 예를 들어 현재 프로세서가 3이고 명령을 ba e1 MyAddress 사용하여 MyAddress에 중단점을 배치하는 경우 해당 주소에서 실행되는 프로세서 3뿐만 아니라 모든 프로세서가 중단점을 트리거합니다. (소프트웨어 중단점도 마찬가지입니다.)

동일한 주소에서 CommandString 값만 다른 여러 프로세서 중단점을 만들 수 없습니다. 그러나 다른 제한 사항이 있는 동일한 주소에 여러 중단점을 만들 수 있습니다(예: /p, /t, /c/C 옵션의 다른 값).

프로세서 중단점 및 해당 중단점에 적용되는 추가 제한 사항에 대한 자세한 내용은 프로세서 중단점(ba 중단점)을 참조하세요.

다음 예제에서는 ba 명령을 보여 줍니다. 다음 명령은 myVar 변수의 4바이트에서 읽기 액세스에 대한 중단점을 설정합니다.

0:000> ba r4 myVar

다음 명령은 0x3F8 0x3FB 주소가 있는 모든 직렬 포트에 중단점을 추가합니다. 이 중단점은 이러한 포트를 읽거나 쓰는 경우 트리거됩니다.

kd> ba i4 3f8