Как Visual Studio подключается к процессу работы?


Мне всегда хотелось узнать о внутренней работе отладчика Visual Studio и отладчиков в целом. Как он взаимодействует и управляет вашим кодом, особенно когда он выполняется внутри хост-процесса или на внешнем сетевом сервере (присоединяется к процессу)? Исправляет ли компилятор или компоновщик ваш код обратными вызовами, чтобы отладчик получил контроль? Если это действительно работает таким образом, как работают интерпретируемые языки, такие как JavaScript, не содержащие отладочного кода?

2 4

2 ответа:

Вообще говоря, Windows предоставляетAPI для написания отладчиков, которые позволяют проверять и изменять память в другом процессе и получать уведомления, когда в другом процессе происходят исключения.

Процесс отладки находится в цикле, ожидая уведомления от событий из проверяемого процесса. Чтобы установить точку останова, процесс отладчика изменяет код в отладчике, вызывая исключение (обычно это инструкция int 3 для x86).

Компилятор и компоновщики работают вместе, чтобы сделать символьную информацию о программе доступной в формате, который может быть прочитан отладчиками. В Windows это обычно CodeView в отдельном файле PDB.

В мире, производном от Unix, есть API под названием ptrace, который делает по существу те же самые вещи, что и API отладки Windows.

Для удаленной отладки на удаленную машину помещается небольшая программа, которая взаимодействует с реальным отладчиком, работающим на локальном компьютере, и действует от его имени. машина.

Для интерпретируемых языков, таких как JavaScript, отладчик работает с интерпретатором, чтобы дать те же самые функциональные возможности (проверка памяти, установка точек останова и т. д.).

Windows включает поддержку отладчиков. Процесс должен включить привилегию отладчика, и как только это будет сделано, этот процесс может присоединяться к любому другому процессу и отлаживать его с помощью функций отладчика windows

Http://msdn.microsoft.com/en-us/library/windows/desktop/ms679303 (v=против 85).aspx

Для чего-то вроде javascript, похоже, вам понадобится эквивалент отладчика javascript.

В случае визуальная студия мульти-процесса, проекта, вы, как правило, имеют переключить, к какому процессу присоединен отладчик, чтобы отладить этот процесс. Я не знаю, есть ли способ установить точки останова ожидания для нескольких процессов одновременно. Могут быть и другие отладчики, которые лучше работают с несколькими процессами, но я не использовал такой инструмент.