Visual studio attach to process что это

Обновлено: 04.07.2024

когда я столкнулся с этой ситуацией раньше (и я контролировал оба процесса), я нашел достойный обходной путь, чтобы позвонить отладчик.Launch () в точке входа процесса нереста. VS затем появится диалоговое окно и позволит вам подключиться к процессу.

еще одно хорошее решение-использовать расширение Visual Studio "ReAttach". Можно найти здесь.

Если ваш процесс в настоящее время не запущен, ReAttach попросит вас запустить его и прикрепить к нему, как только он станет доступен.

"Entrian Attach" это надстройка Visual Studio, которая делает именно это - вы говорите ему имя вашего исполняемого файла, и он присоединяет отладчик при запуске процесса, независимо от того, как он запущен, до запуска любого кода.

(раскрытие: я-автор. Я построил приложение, потому что у меня есть эта проблема все время!)

Как насчет этого: откройте проект a.exe в VS установите точки останова и т. д. Тогда откройте Свойства Проекта для a.exe, отладка tab и set команда до c.exe . Тогда просто нажмите Debug.

к сожалению, я никогда не делал этого с управляемыми проектами, поэтому я могу быть не в курсе здесь. Однако именно так я бы сделал это с неуправляемыми (C++) проектами. Я думаю, что управляемый отладчик должен поддерживать его тоже.

вы также можете использовать gflags.exe util, который поставляется с инструментами отладки Windows, все, что вам нужно сделать, это открыть gflags.exe затем перейдите в файл изображения введите имя процесса (a.exe) нажмите tab и установите флажок отладчик, в текстовом поле введите путь vs с опцией / debugexe (т. е. "C:\Program файлы (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe " / debugexe)

автоматически visual studio откроется после запуска процесса вы можете добавить свои точки останова и нажать Бежать.

по состоянию на VS 2013 SP2, есть бесплатный инструмент от Microsoft, который делает то же самое, что и "Spawned Process Catcher", упомянутый ранее - прикрепление всех процессов, которые запускаются процессом уже в отладке. Примечание: Я только проверил это с неуправляемым C++ (это работает безупречно).

Microsoft Child Process Debugging Power Tool

запись в блоге MSDN

Присоединение к выполняемым процессам с использованием отладчика Visual Studio

Отладчик Visual Studio можно подключить к запущенному процессу на локальном или удаленном компьютере. После выполнения процесса выберите Отладка > Подключить к процессу или нажмите клавиши CTRL+ALT+P в Visual Studio и используйте диалоговое окно Подключение к процессу, чтобы подключить отладчик к процессу.

Параметр Подключить к процессу можно использовать для отладки запущенных приложений на локальных или удаленных компьютерах, одновременной отладки нескольких процессов, отладки приложений, которые не были созданы в Visual Studio, или отладки любого приложения, которое не было запущено из Visual Studio с прикрепленным отладчиком. Например, если вы используете приложение без отладчика и столкнулись с исключением, можно присоединить отладчик к процессу, в котором выполняется приложение, и начать отладку.

[!TIP] Не уверены, следует ли использовать параметр Подключить к процессу для сценария отладки? См. раздел Общие сценарии отладки.

Присоединение к выполняющемуся процессу на локальном компьютере

Сведения о том, как быстро присоединиться к процессу, подключенному ранее, см. в разделе Повторное подключение к процессу.

Порядок присоединения к процессу на локальном компьютере

В Visual Studio выберите Отладка > Подключить к процессу (или нажмите клавиши CTRL+ALT+P), чтобы открыть диалоговое окно Подключение к процессу.

Проверьте значение параметра Тип подключения.

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

В поле Цель подключения укажите имя локального компьютера.

Снимок экрана: диалоговое окно "Присоединение к процессу", в котором в качестве целевого объекта подключения задано имя локального компьютера.

В списке Доступные процессы найдите и выберите процессы, к которым нужно присоединиться.

Чтобы быстро выбрать процесс, введите его имя или первую букву в поле Фильтр процессов.

Если вы не знаете имя процесса, просмотрите список или обратитесь к разделу Общие сценарии отладки, чтобы ознакомиться с некоторыми распространенными именами процессов.

[!TIP] Процессы могут запускаться и останавливаться в фоновом режиме, пока диалоговое окно Подключение к процессу открыто, поэтому список запущенных процессов может не всегда быть актуальным. Чтобы просмотреть актуальный список, можно в любое время нажать кнопку Обновить.

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

При использовании типа подключения По умолчанию можно вручную выбрать тип кода, к которому нужно подключиться. В противном случае кнопка Выбрать может быть неактивна.

Выбор кода вручную

Выберите Подключить.

. moniker range=">= vs-2022"

[!TIP] В сценарии с несколькими идентичными процессами вы можете указать процесс с использованием столбца командной строки или сведений о процессе w3wp из столбца заголовка. . moniker-end

[!NOTE] Во время отладки можно подключиться к нескольким приложениям, но в любой момент времени только один из них активен в отладчике. Можно выбрать текущую программу в панели инструментов Место отладки или окне Процессы в Visual Studio.

Присоединение к процессу на удаленном компьютере

В диалоговом окне Подключение к процессу также можно выбрать удаленный компьютер, просмотреть список доступных процессов, запущенных на этом компьютере, и подключиться к одному или нескольким процессам для отладки. На удаленном компьютере должен выполняться удаленный отладчик (msvsmon.exe). Дополнительные сведения см. в статье Удаленная отладка.

Присоединение к выполняющемуся процессу на удаленном компьютере

В Visual Studio выберите Отладка > Подключить к процессу (или нажмите клавиши CTRL+ALT+P), чтобы открыть диалоговое окно Подключение к процессу.

Проверьте значение параметра Тип подключения.

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

В поле Целевой объект подключения выберите удаленный компьютер одним из следующих способов.

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

Введите имя компьютера в поле Целевой объект подключения и нажмите клавишу ВВОД.

Убедитесь, что Visual Studio добавляет требуемый порт в имя компьютера, которое отображается в формате <remote computer name>:порт.

. moniker range=">= vs-2022"

[!NOTE] Если вы не можете подключиться с помощью имени удаленного компьютера, попробуйте использовать IP-адрес и порт (например, 123.45.678.9:4022 ). 4026 — это порт по умолчанию для удаленного отладчика Visual Studio 2022. Сведения о других назначениях портов удаленного отладчика см. в разделе Назначение портов удаленного отладчика.

. moniker-end . moniker range="vs-2019"

[!NOTE] Если вы не можете подключиться с помощью имени удаленного компьютера, попробуйте использовать IP-адрес и порт (например, 123.45.678.9:4022 ). 4024 — это порт по умолчанию для удаленного отладчика Visual Studio 2019. Сведения о других назначениях портов удаленного отладчика см. в разделе Назначение портов удаленного отладчика.

. moniker-end . moniker range="vs-2017"

[!NOTE] Если вы не можете подключиться с помощью имени удаленного компьютера, попробуйте использовать IP-адрес и порт (например, 123.45.678.9:4022 ). 4022 — это порт по умолчанию для удаленного отладчика Visual Studio 2017. Сведения о других назначениях портов удаленного отладчика см. в разделе Назначение портов удаленного отладчика.

[!NOTE] Значение параметра Тип подключения сохраняется между сеансами отладки. Параметр Целевой объект подключения хранится между сеансами отладки только в случае успешного подключения отладки с этим целевым объектом.

[!TIP] Процессы могут запускаться и останавливаться в фоновом режиме, пока диалоговое окно Подключение к процессу открыто, поэтому список запущенных процессов может не всегда быть актуальным. Чтобы просмотреть актуальный список, можно в любое время нажать кнопку Обновить.

В списке Доступные процессы найдите и выберите процессы, к которым нужно присоединиться.

Чтобы быстро выбрать процесс, введите его имя или первую букву в поле Фильтр процессов.

Если вы не знаете имя процесса, просмотрите список или обратитесь к разделу Общие сценарии отладки, чтобы ознакомиться с некоторыми распространенными именами процессов.

Чтобы найти процесс, который выполняется с другой учетной записью пользователя, установите флажок Показать процессы всех пользователей.

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

При использовании типа подключения По умолчанию можно вручную выбрать тип кода, к которому нужно подключиться. В противном случае кнопка Выбрать может быть неактивна.

Выбор кода вручную

Выберите Подключить.

[!NOTE] Во время отладки можно подключиться к нескольким приложениям, но в любой момент времени только один из них активен в отладчике. Можно выбрать текущую программу в панели инструментов Место отладки или окне Процессы в Visual Studio.

В некоторых случаях при отладке в сеансе удаленного рабочего стола (службы терминалов) в списке Доступные процессы не отображаются все доступные процессы. При работе с Visual Studio в качестве пользователя с ограниченным доступом в списке Доступные процессы не будут отображаться процессы, запущенные в сеансе 0, который используется для служб и других серверных процессов, включая w3wp.exe. Можно устранить эту проблему, запустив [!INCLUDEvsprvs] под учетной записью администратора или запустив [!INCLUDEvsprvs] с консоли сервера вместо сеанса служб терминалов.

Если ни один из этих обходных путей использовать невозможно, третий вариант — присоединение к процессу путем запуска vsjitdebugger.exe -p <ProcessId> из командной строки Windows. Можно определить идентификатор процесса с помощью tlist.exe. Чтобы получить файл tlist.exe, скачайте и установите средства отладки для Windows, которые доступны на странице скачиваемых файлов WDK и WinDbg.

Если вы выполняете публикацию в Службе приложений Azure (Windows), параметр Подключить отладчик можно найти в меню . в разделе Размещение. Visual Studio пытается подключить удаленный отладчик к экземпляру Службы приложений Azure (Windows), в котором публикуется профиль.

. image type="content" source="../debugger/media/attach-debugger-publish-profile.jpg" alt-text="Снимок экрана: параметр "Подключить отладчик" на странице сводки публикации".

. moniker range=">= vs-2019"

Присоединение к процессу, выполняющемуся в контейнере Docker

Повторное подключение к процессу

Чтобы быстро присоединиться к процессам, к которым вы ранее были присоединены, выберите Отладка > Повторно подключиться к процессу (SHIFT+ALT+P). При выборе этой команды отладчик сразу же попытается присоединиться к последним процессам, к которым вы подключались, сначала попытавшись выполнить сопоставление с ИД предыдущего процесса, а если это не удается, то путем сопоставления с именем предыдущего процесса. Если совпадений не найдено или несколько процессов имеют одно и то же имя, откроется диалоговое окно Подключение к процессу, в котором можно выбрать правильный процесс.

[!NOTE] Команда Повторно подключиться к процессу доступна начиная с Visual Studio 2017.

Общие сценарии отладки

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

Для некоторых типов приложений, например универсальных приложений для Windows (UWP), не следует напрямую подключаться к имени процесса. Вместо этого необходимо использовать команду Отладка установленного пакета приложения в Visual Studio (см. таблицу).

Чтобы отладчик мог присоединиться к коду на языке C++, код должен предоставлять DebuggableAttribute . Это можно добавить в код автоматически, путем связывания с параметром /ASSEMBLYDEBUG компоновщика.

Для отладки скриптов на стороне клиента в браузере должна быть включена отладка скриптов. Для отладки клиентского скрипта в Chrome выберите JavaScript (Chrome) или JavaScript (Microsoft Edge - Chromium) в качестве типа кода, и, в зависимости от типа приложения, может потребоваться закрыть все экземпляры Chrome и запустить браузер в режиме отладки (введите chrome.exe --remote-debugging-port=9222 в командной строке). В более ранних версиях Visual Studio в качестве отладчика скриптов для Chrome использовался Веб-пакет.

Чтобы быстро выбрать выполняющийся процесс для подключения, в Visual Studio нажмите клавиши CTRL+ALT+P, а затем введите первую букву имени процесса.

Использование функций отладчика

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

В сценариях удаленной отладки должен быть уже открыт исходный код (или копия исходного кода) в Visual Studio. Скомпилированные двоичные файлы приложения на удаленном компьютере должны поступать из той же сборки, что и на локальном компьютере.

В некоторых локальных сценариях отладки в Visual Studio можно выполнять отладку без доступа к источнику, если в приложении есть правильные файлы символов. По умолчанию для этого требуется отладочная сборка. Дополнительные сведения см. в разделе Указание файлов символов и исходных файлов.

Устранение ошибок присоединения

В некоторых сценариях отладчику может потребоваться помощь, чтобы правильно определить тип отлаживаемого кода. Если значения для подключения заданы правильно (проверить процесс можно в списке Доступные процессы), но отладчику не удается подключиться, попробуйте выбрать наиболее подходящий тип подключения в списке Тип подключения. Это может потребоваться, например, при отладке приложения Linux или Python. Если используется тип подключения "По умолчанию", можно также выбрать определенный тип кода для подключения, как описано далее в этом разделе.

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

Иногда отладчик может успешно присоединяться к одному типу кода, но не к другому. Это происходит в следующих случаях:

  • При попытке присоединения к процессу, выполняющемуся на удаленном компьютере. На удаленном компьютере для одних типов кода могут иметься компоненты удаленной отладки, а для других — нет.
  • При попытке присоединиться к двум или более процессам для прямой отладки базы данных. Отладка SQL поддерживает присоединение только к одному процессу.

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

Если нужны более конкретные сведения о том, почему отладчику не удалось присоединиться к некоторому типу кода, попробуйте повторно присоединиться только к этому типу кода.

Чтобы получить подробные сведения о том, почему не удалось присоединиться к типу кода:

Отключитесь от процесса. В меню Отладка выберите Отсоединить все.

Вновь подключитесь к процессу, выбрав только тип кода.

В диалоговом окне Присоединение к процессу выберите процесс в списке Доступные процессы.

Щелкните Выбрать.

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

В диалоговом окне Подключение к процессу нажмите Подключиться.

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

2 ответа

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

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

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

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

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

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

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

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

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

Мой MainUI связался с WCF и WCF далее связывается с BLL и DAL, всякий раз, когда мне нужно отлаживать BLL и DAL, мне сначала нужно прикрепить WCF как процесс в Visual studio(каждый раз). Как бы я мог уберечь себя от этой мороки.

Как я мог настроить visual studio таким образом, чтобы я автоматически подключался к службе автоматически и мог легко отлаживать свое приложение?

Всякий раз, когда я пытаюсь отладить веб-проект Visual Studio 2010, VS зависает и в конечном итоге выходит из строя. Это происходит, если я пытаюсь запустить проект с помощью F5 или через Attach to Process еще до того, как появится список процессов. Нажатие F5, например, в проекте формы Windows.

Я написал обработчик событий для сайта sharepoint 2010, используя visual studio 2010 . Я прикрепил точку останова к коду и следовал процессу, который я сделал в visual studio 2008. Он состоит в том, чтобы использовать опцию прикрепить к процессу и выбрать опцию w3wp. Событие привязывается, но.

Настройте свое решение для запуска нескольких проектов. Я делаю это для аналогичного приложения. VS автоматически запускает WCF и клиент, и я могу установить точки останова в любом из них.

Порядок запуска - это порядок, в котором вы выбираете проекты.

Щелкните правой кнопкой мыши на вашем решении и выберите "Выбрать запускаемые проекты". Затем выберите несколько запускаемых проектов и выберите проекты.

Пример того, как запустить процесс и прикрепить его к Visual Studio 2010 с EnvDTE(версия актуальна).

В настоящее время я работаю над веб-приложением в Visual Studio 2010. Я предпочитаю отлаживать Javascript в этом приложении с помощью инструментов разработки в IE, поэтому каждый раз, когда я отлаживаю приложение, мне приходится вручную отсоединять процесс iexplore.exe в окне Processes , чтобы я.

Я пытаюсь понять, для чего полезно прикрепление к процессу в Visual Studio. Я ищу утечку памяти и нахожу, что WinDBG довольно трудно использовать, если не сказать больше. Я понимаю, что есть и другие коммерческие альтернативы, такие как ANT Profiler. Для чего конкретно используется прикрепление к.

Попробуйте использовать System.Diagnostics.Debugger.Break() в коде. Если отладчик не подключен, то при выполнении этого кода будет предложено подключить отладчик, и вы сможете выбрать существующий экземпляр.

Если это для самостоятельной службы WCF windows, вам необходимо настроить хост службы WCF для запуска в консоли или в качестве службы windows. Когда вы включили консоль запуска, вы можете начать отладку с visual studio.

Создайте параметр приложения с именем "RunInConsole." В методе запуска узла службы, используйте следующий код:

Во всех средах, в которых вы развертываетесь, для этого параметра конфигурации всегда будет установлено значение false, иначе служба не запустится, но при локальной отладке вы установите для него значение true.

  1. На странице свойств для проекта wcf service выберите вкладку Web.
  2. Выберите "Запустить внешнюю программу" для действия "Начать" и выберите MainUI.exe.
  3. Установите рабочий каталог в качестве папки, в которой находится MainUI.exe (возможно, папка bin).
  4. Установите точку останова и нажмите клавишу f5, чтобы начать отладку.

Если я правильно понимаю, макрос может быть ответом:

  1. Инструменты->Macros->запись TemporarilyMacro (Ctrl+shift+r)
  2. Прикрепите VS к процессу как обычно (ctrl+alt+p)
  3. Остановить запись макроса (ctrl+shift+r)
  4. Перейдите в меню Вид->Другие Windows->Макрос Explorer (CTRL+F8)
  5. найдите свой временный макрос (где-то в MyMacros - >RecordingModule) и переименуйте его
  6. Теперь перейдите в меню Инструменты->Параметры->Клавиатура и найдите свой макрос (в разделе "Показать команду, содержащую имя вашего макроса)
  7. в "Press Shortcut keys" свяжите его с какой-нибудь комбинацией клавиш (у меня есть макрос в CTRL+SHIFT+K ;))
  8. Нажмите OK
  9. будь счастлив

Вот статья, в которой объясняется, как сделать this. You можно настроить этот макрос.

Лично я предпочитаю использовать Debugger.Launch() , как предложено здесь в этой теме, потому что он не нуждается в ссылках на DTE (это специфично для IDE и должно быть явно указано в проекте, который будет использоваться)

Похожие вопросы:

Я пытаюсь написать пакет Visual Studio, который присоединит отладчик к именованному процессу. Я использую следующий код в своем пакете. var info = new VsDebugTargetInfo < dlo =.

Я использую Visual Studio 2008; можно ли настроить параметры отладки проекта для автоматического присоединения к процессу с определенным именем при нажатии клавиши F5? Edit: фактический макрос.

Я использую VS 2010 для присоединения к скрипту Python, который вызывает DLL через ctypes. Я могу прикрепиться к процессу, и под видом Modules я вижу DLL, и он связан с PDB. Пути ведут прямо к папке.

Всякий раз, когда я пытаюсь отладить веб-проект Visual Studio 2010, VS зависает и в конечном итоге выходит из строя. Это происходит, если я пытаюсь запустить проект с помощью F5 или через Attach to.

Я написал обработчик событий для сайта sharepoint 2010, используя visual studio 2010 . Я прикрепил точку останова к коду и следовал процессу, который я сделал в visual studio 2008. Он состоит в том.

В настоящее время я работаю над веб-приложением в Visual Studio 2010. Я предпочитаю отлаживать Javascript в этом приложении с помощью инструментов разработки в IE, поэтому каждый раз, когда я.

Я пытаюсь понять, для чего полезно прикрепление к процессу в Visual Studio. Я ищу утечку памяти и нахожу, что WinDBG довольно трудно использовать, если не сказать больше. Я понимаю, что есть и.

У меня есть веб-страница, работающая на localhost, которую я хочу использовать для прерывания кода в Visual Studio 2010. Веб-страница работает в Internet Explorer. OS - это Windows 2008. Когда я иду.

Все, у меня есть сборка, установленная на моей машине, и некоторые функции отлично работают в коде( в обоих режимах release и debug), но эта функциональность работает не только в сборке. Так вот, я.

Я пытаюсь протестировать приложение, которое использует Visual Studio 2015 Shell (изолированный). Для тестирования пакета расширения с Visual Studio я нашел образцы для более старых версий . Они.

Читайте также: