다음을 통해 공유


WinDbg 클래식을 사용하여 사용자 모드 프로세스 디버깅

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

실행 중인 프로세스에 연결

WinDbg를 사용하여 실행 중인 프로세스에 연결할 수 있는 여러 가지 방법이 있습니다. 선택한 방법에 관계없이 프로세스 ID 또는 프로세스 이름이 필요합니다. 프로세스 ID는 운영 체제에서 할당한 숫자입니다. 프로세스 ID 및 프로세스 이름을 확인하는 방법에 대한 자세한 내용은 프로세스 ID 찾기를 참조하세요.

WinDbg 메뉴

WinDbg가 휴면 모드인 경우 파일 메뉴에서 프로세스에 첨부를 선택하거나 F6 키를 눌러 실행 중인 프로세스에 연결할 수 있습니다.

프로세스연결 대화 상자에서 디버그할 프로세스를 선택하고 확인을 선택합니다.

명령 프롬프트

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

  • windbg -p ProcessID
  • windbg -pn ProcessName

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

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

디버거 명령 창

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

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

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

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

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

WinDbg 메뉴

WinDbg가 휴면 모드인 경우 파일 메뉴에서 프로세스에 첨부를 선택하거나 F6 키를 눌러 실행 중인 프로세스를 비침공적으로 디버그할 수 있습니다.

프로세스연결 대화 상자가 나타나면 비침용성 확인란을 선택합니다. 그런 다음, 원하는 프로세스 ID와 이름을 포함하는 줄을 선택합니다. (프로세스 ID를 에 입력할 수도 있습니다.프로세스 ID 상자.) 마지막으로 확인을 선택합니다.

명령 프롬프트

명령 프롬프트 창에서 WinDbg를 시작할 때 실행 중인 프로세스에 비침공적으로 연결할 수 있습니다. 다음 명령 중 하나를 사용합니다.

  • windbg -pv -p ProcessID
  • windbg -pv -pn ProcessName

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

디버거 명령 창

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

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

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

새 프로세스 생성

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

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

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

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

WinDbg 메뉴

WinDbg가 휴면 모드인 경우 파일 메뉴에서 실행 파일 열기를 선택하거나 Ctrl+E를 눌러 새 프로세스를 생성할 수 있습니다.

실행 파일 열기 대화 상자가 나타나면 파일 이름 상자에 실행 파일의 전체 경로를 입력하거나 찾는 목록을 사용하여 원하는 경로와 파일 이름을 선택합니다.

사용자 모드 애플리케이션에서 명령줄 매개 변수를 사용하려면 인수 상자에 입력합니다. 기본 디렉터리에서 시작 디렉터리를 변경하려면 디렉터리 시작 상자에 디렉터리 경로를 입력합니다. WinDbg를 자식 프로세스에 연결하려면 자식 프로세스도 디버그 확인란을 선택합니다.

선택한 후 열기를 선택합니다.

명령 프롬프트

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

windbg [-o] ProgramName [인수]

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

디버거 명령 창

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

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

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

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

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

프로세스에 다시 연결

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