2017-03-02 4 views
2

저는 항상 Visual Studio 디버거와 디버거의 내부 동작을 알고 싶었습니다. 특히 외부 앱이나 서버 내부에서 실행될 때 코드와 통신하고 제어 할 수 있습니까? (프로세스에 연결) 디버거가 컨트롤을 제공하도록 컴파일러 나 링커가 코드를 패치합니까? 또한, 이것이 작동하는 방법이라면, 패치 할 수있는 실제 파일이없는 JavaScript와 같은 언어에 대해 어떻게 작동합니까?Visual Studio Attach to Process는 어떻게 작동합니까?

답변

0

Windows에는 디버거가 지원됩니다. 프로세스는 디버거 권한을 가능하게해야하고,이 작업이 완료되면 해당 프로세스는 다른 프로세스에 연결 및 자바 스크립트 같은 것을 들어 보인다

http://msdn.microsoft.com/en-us/library/windows/desktop/ms679303(v=vs.85).aspx

당신의 동등해야처럼 창문 디버거 기능을 사용하여 디버깅 할 수 있습니다 자바 스크립트 디버거.

Visual Studio 다중 프로세스 프로젝트의 경우 일반적으로 해당 프로세스를 디버깅하려면 디버거가 연결된 프로세스를 전환해야합니다. 동시에 여러 프로세스에 설정된 보류 중단 점이있는 방법이 있는지 모르겠습니다. 여러 프로세스에서 더 잘 작동하는 다른 디버거가있을 수 있지만 이러한 도구는 사용하지 않았습니다.

+0

OS가 매우 원시적이며 디버거에서 사용할 수있는 특정 디버깅 기능이없는 경우 작동하지 않습니다. 디버깅은 DOS 이후부터 있었으며 디버거에 대한 특정 지원이 있는지 확신 할 수 없습니다. –

+0

@ATL_DEV - 일부 OS는 디버거 사용을 제한합니다. Windows에서는 트레이너 유형 디버거를 모든 프로세스에서 사용할 수있는이 작업을 수행하지 않습니다. 리얼 모드의 DOS의 경우, 권한이 필요한 명령어가 없으므로 DOS는 디버거를 허용하기 위해 특별한 작업을 수행 할 필요가 없습니다. Posix 시스템에는 선택적인 디버깅 커널이있을 수 있으며 주로 장치 드라이버를 디버그하는 데 사용됩니다. Windows는 두 대의 컴퓨터를 사용하여 장치 드라이버를 디버깅하는 원격 디버깅을 사용합니다. – rcgldr

1

일반적으로 Windows는 다른 프로세스에서 메모리를 검사 및 수정하고 다른 프로세스에서 예외가 발생할 경우 알림을받을 수 있도록 디버거 작성을 위해 an API을 제공합니다.

디버그 프로세스가 검사중인 프로세스의 이벤트로부터 알림을 기다리는 루프에 있습니다. 중단 점을 설정하기 위해 디버거 프로세스는 디버거의 코드를 수정하여 예외 (일반적으로 x86 용 int 3 명령어)를 발생시킵니다.

디버거에서 읽을 수있는 형식으로 프로그램에 대한 기호 정보를 사용할 수 있도록 컴파일러와 링커가 함께 작동합니다. Windows에서는 일반적으로 별도의 PDB 파일에 CodeView가 있습니다.

유닉스에서 파생 된 세계에는 Windows 디버깅 API와 본질적으로 동일한 종류의 기능을 수행하는 ptrace라는 API가 있습니다.

원격 디버깅을 위해 로컬 시스템에서 실행중인 실제 디버거를 사용하여 통신하는 작은 프로그램이 원격 시스템에 배치됩니다.

JavaScript와 같은 인터프리터 언어의 경우 디버거가 인터프리터와 함께 작동하여 같은 종류의 기능 (메모리 검사, 중단 점 설정 등)을 제공합니다.

+0

리눅스 및 기타 구형 OS는 어떻습니까? 비슷한 시설을 가지고 있습니까? –

+0

@ATL_DEV : 비 Windows OS에서 디버그 정보는 종종 DWARF를 사용하여 바이너리에 임베드됩니다. 다른 OS의 디버깅 API에 대해서는 알지 못합니다. 이 질문은 특히 Visual Studio와 Windows에 관한 것 같습니다. LLDB와 같은 플랫폼 간 오픈 소스 디버거에 대한 코드를 연구하여 OS 간의 차이점에 대해 자세히 배울 수 있습니다. –

+0

이 관련 질문에 대한 답변 중 일부는 다른 OS에 대해 설명합니다. http://stackoverflow.com/questions/216819/how-does-a-debugger-work?rq=1 –