다음을 통해 공유


CDB를 사용하여 User-Mode 프로세스 디버깅

CDB를 사용하여 실행 중인 프로세스에 연결하거나 새 프로세스를 생성하고 연결할 수 있습니다.

실행 중인 프로세스에 연결

명령 프롬프트

명령 프롬프트 창에서 CDB를 시작할 때 실행 중인 프로세스에 연결할 수 있습니다. 다음 중 하나의 명령을 사용합니다.

  • cdb -pProcessID
  • cdb -pnProcessName

여기서 ProcessID 는 실행 중인 프로세스의 프로세스 ID이거나 ProcessName 은 실행 중인 프로세스의 이름입니다.

명령줄 구문에 대한 자세한 내용은 CDB Command-Line 옵션을 참조하세요.

CDB 명령 창

디버거가 하나 이상의 프로세스를 이미 디버깅하는 경우 .attach(프로세스에 연결) 명령을 사용하여 실행 중인 프로세스에 연결할 수 있습니다.

일부 스레드가 고정되거나 일시 중단되지 않는 한 디버거는 항상 여러 대상 프로세스를 동시에 시작합니다.

.attach 명령이 성공하면 디버거가 다음에 실행 명령을 실행할 때 지정된 프로세스에 디버거가 연결됩니다. 이 명령을 한 행에 여러 번 사용하는 경우 이 명령을 사용하는 만큼 디버거에서 실행을 요청해야 합니다.

실행 중인 프로세스에 비침약적으로 연결

실행 중인 프로세스를 디버그하고 실행에서 최소한으로만 방해하려는 경우 프로세스를 비 침해적으로 디버그해야 합니다.

명령 프롬프트

CDB 명령줄에서 실행 중인 프로세스를 비침범적으로 디버그하려면 다음 구문에서 -pv 옵션, -p 옵션 및 프로세스 ID를 지정합니다.

cdb -pv -pProcessID

또는 프로세스 이름을 지정하여 실행 중인 프로세스를 비침공적으로 디버그하려면 대신 다음 구문을 사용합니다.

cdb -pv -pnProcessName

다른 몇 가지 유용한 명령줄 옵션이 있습니다. 명령줄 구문에 대한 자세한 내용은 CDB Command-Line 옵션을 참조하세요.

CDB 명령 창

디버거가 이미 활성 상태인 경우 .attach -v(프로세스에 연결) 명령을 입력하여 실행 중인 프로세스를 비침범적으로 디버그할 수 있습니다.

디버거가 이미 하나 이상의 프로세스를 침략적으로 디버깅하는 경우 .attach 명령을 사용할 수 있습니다.

.attach -v 명령이 성공하면 디버거는 다음에 디버거가 실행 명령을 실행할 때 지정된 프로세스를 디버그합니다. 비침범성 디버깅 중에는 실행이 허용되지 않으므로 디버거는 한 번에 둘 이상의 프로세스를 비침범적으로 디버그할 수 없습니다. 또한 이 제한은 .attach -v 명령을 사용하면 기존의 침습적 디버깅 세션이 덜 유용할 수 있음을 의미합니다.

새 프로세스 생성

CDB는 사용자 모드 애플리케이션을 시작한 다음 애플리케이션을 디버그할 수 있습니다. 애플리케이션은 이름으로 지정됩니다. 디버거는 자식 프로세스(원래 대상 프로세스가 시작된 추가 프로세스)에 자동으로 연결할 수도 있습니다.

디버거가 만드는 프로세스(생성된 프로세스라고도 함)는 디버거가 만들지 않는 프로세스와 약간 다르게 동작합니다.

표준 힙 API를 사용하는 대신 디버거가 만드는 프로세스는 특별한 디버그 힙을 사용합니다. _NO_DEBUG_HEAP 환경 변수 또는 -hd 명령줄 옵션을 사용하여 생성된 프로세스가 디버그 힙 대신 표준 힙을 사용하도록 강제할 수 있습니다.

또한 대상 애플리케이션은 디버거의 자식 프로세스이므로 디버거의 권한을 상속합니다. 이 권한을 사용하면 대상 애플리케이션이 그렇지 않으면 수행할 수 없는 특정 작업을 수행할 수 있습니다. 예를 들어 대상 애플리케이션은 보호된 프로세스에 영향을 줄 수 있습니다.

명령 프롬프트 창에서 CDB를 시작할 때 새 프로세스를 생성할 수 있습니다. 다음 명령을 입력합니다.

cdb [-o]ProgramName[Arguments]

-o 옵션을 사용하면 디버거가 자식 프로세스에 연결됩니다. 다른 몇 가지 유용한 명령줄 옵션이 있습니다. 명령줄 구문에 대한 자세한 내용은 CDB Command-Line 옵션을 참조하세요.

디버거가 하나 이상의 프로세스를 이미 디버깅하는 경우 .create(프로세스 만들기) 명령을 입력하여 새 프로세스를 만들 수 있습니다.

일부 스레드가 고정되거나 일시 중단되지 않는 한 디버거는 항상 여러 대상 프로세스를 동시에 시작합니다.

.create 명령이 성공하면 디버거는 다음에 디버거가 실행 명령을 실행할 때 지정된 프로세스를 만듭니다. 이 명령을 한 행에 여러 번 사용하는 경우 이 명령을 사용하는 만큼 디버거에서 실행을 요청해야 합니다.

.create 전에 .createdir(만든 프로세스 디렉터리 설정) 명령을 사용하여 애플리케이션의 시작 디렉터리를 제어할 수 있습니다. .createdir -I 명령 또는 -noinh 명령줄 옵션을 사용하여 대상 애플리케이션이 디버거의 핸들을 상속하는지 여부를 제어할 수 있습니다.

.childdbg(자식 프로세스 디버그) 명령을 사용하여 자식 프로세스의 디버깅을 활성화하거나 비활성화할 수 있습니다.

프로세스에 다시 연결

디버거가 응답을 중지하거나 중지하는 경우 대상 프로세스에 새 디버거를 연결할 수 있습니다. 이 상황에서 디버거를 연결하는 방법에 대한 자세한 내용은 대상 애플리케이션에 다시 연결을 참조하세요.