Switch to process windows

Средства для отладки потоков и процессов в Visual Studio Tools to debug threads and processes in Visual Studio

Потоки и процессы — это связанные понятия в вычислительной технике. Threads and processes are related concepts in computer science. Оба представляют из себя последовательность инструкций, которые должны выполняться в определенном порядке. Both represent sequences of instructions that must execute in a specific order. Инструкции в отдельных потоках или процессах, однако, могут выполняться параллельно. Instructions in separate threads or processes, however, can execute in parallel.

Процессы существуют в операционной системе и соответствуют тому, что пользователи видят как программы или приложения. Processes exist in the operating system and correspond to what users see as programs or applications. Поток, с другой стороны, существует внутри процесса. A thread, on the other hand, exists within a process. По этой причине потоки иногда называются облегченными процессами. For this reason, threads are sometimes referred to as light-weight processes. Каждый процесс состоит из одного или более потоков. Each process consists of one or more threads.

Существование нескольких процессов позволяет компьютеру «одновременно» выполнять несколько задач. The existence of multiple processes enables a computer to perform more than one task at a time. Существование нескольких потоков позволяет процессу разделять работу для параллельного выполнения. The existence of multiple threads enables a process to separate work to be performed in parallel. На многопроцессорном компьютере процессы или потоки могут работать на разных процессорах. On a computer with multiprocessors, processes or threads can run on different processors. Это позволяет выполнять реально параллельную работу. This enables true parallel processing.

Абсолютно параллельная обработка не всегда возможна. Perfect parallel processing is not always possible. Потоки иногда должны синхронизироваться. Threads sometimes must be synchronized. Один поток может ожидать результата другого потока, или одному потоку может понадобиться монопольный доступ к ресурсу, который используется другим потоком. One thread may have to wait for a result from another thread, or one thread may need exclusive access to a resource that another thread is using. Проблемы синхронизации являются распространенной причиной ошибок в многопоточных приложениях. Synchronization problems are a common cause of bugs in multithreaded applications. Иногда поток может закончиться, ожидая ресурс, который никогда не будет доступен. Sometimes threads may end up waiting for a resource that never becomes available. Это кончается состоянием, которое называется взаимоблокировкой. This results in a condition called deadlock.

Отладчик Visual Studio Visual Studio предоставляет мощные, но простые в использовании средства отладки потоков и процессов. The Visual Studio Visual Studio debugger provides powerful but easy-to-use tools for debugging threads and processes.

Инструменты и возможности Tools and features

Средства, которые необходимо использовать в Visual Studio Visual Studio , зависят от типа кода, который вы пытаетесь отладить: The tools you need to use in Visual Studio Visual Studio depend on what type of code you are trying to debug:

Основные средства для работы с процессами — это диалоговое окно Присоединение к процессу, окно Процессы и панель инструментов Место отладки. For processes, the primary tools are the Attach to Process dialog box, the Processes window, and the Debug Location toolbar.

Основные средства для отладки потоков — это окно Потоки, маркеры потоков в окнах исходного кода, окно Параллельные стеки, окно Контроль параллельных данных и панель инструментов Место отладки. For threads, the primary tools for debugging threads are the Threads window, thread markers in source windows, Parallel Stacks window, Parallel Watch window, and the Debug Location toolbar.

Для кода, использующего Task в библиотеке параллельных задач (TPL), среду выполнения с параллелизмом (машинный код), основными средствами отладки многопоточных приложений являются окно Параллельные стеки, окно Контроль параллельных данных и окно Задачи (окно Задачи также поддерживает объект promise JavaScript). For code that uses the Task in the Task Parallel Library (TPL), the Concurrency Runtime (native code), the primary tools for debugging multithreaded applications are the Parallel Stacks window, the Parallel Watch window, and the Tasks window (the Tasks window also supports the JavaScript promise object).

Основным средством отладки потоков в GPU является окно Потоки GPU. For debugging threads on the GPU, the primary tool is the GPU Threads windows.

В следующей таблице показаны доступные данные и действия, которые можно выполнять в каждом из этих мест: The following table shows the information available and the actions you can perform in each of these places:

Пользовательский интерфейс User Interface Доступные сведения Information Available Действия, которые можно выполнять Actions You Can Perform
Диалоговое окно Присоединение к процессуAttach to Process dialog box Доступные процессы для присоединения: Available Processes you can attach to:

— Имя процесса (EXE) — Process name (.exe)
— Идентификатор процесса — Process ID number
— Название строки меню — Menubar Title
— Тип (управляемый код (версия 4); управляемый код (версии 2.0, 1.1, 1.0); x86; x64; IA64) — Type (Managed v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64)
— Имя пользователя (имя учетной записи) — User Name (account name)
— Номер сеанса — Session number

Выберите процесс для присоединения Select a process to attach to

Выберите удаленный компьютер Select a remote computer

Измените тип транспортного протокола для подключения к удаленным компьютерам Change transport type for connecting to remote computers

Окно процессов Processes window Присоединенные процессы: Attached Processes:

— Имя процесса — Process Name
— Идентификатор процесса — Process ID number
— Путь к процессу EXE — Path to process .exe
— Название строки меню — Menubar Title
— Состояние (прерывание. — State (Break. Работа) Running)
— Отладка (машинный код, управляемый код и т. д.) — Debugging (Native, Managed, and so on.)
— Тип транспортного протокола (по умолчанию используется машинный без проверки подлинности) — Transport type (default, native with no authentication)
— Квалификатор транспортного протокола (удаленный компьютер) — Transport Qualifier (remote computer)

Средства: Tools:

— Присоединить — Attach
— Отсоединить — Detach
— Завершить — Terminate

Контекстное меню: Shortcut menu:

— Присоединить — Attach
— Отсоединить — Detach
— Отсоединить, когда отладка остановлена — Detach when debugging stopped
— Завершить — Terminate

Окно Потоки Threads window Потоки текущего процесса: Threads in current process:

— Идентификатор потока — Thread ID
— Управляемый ИД — Managed ID
— Категория (основной поток, поток интерфейса, обработчик вызова удаленной процедуры или рабочий поток) — Category (main thread, interface thread, remote procedure call handler, or worker thread)
— Имя потока — Thread Name
— Место, где создан поток — Location where thread is created
— Приоритет — Priority
— Маска сходства — Affinity Mask
— Приостановленный счетчик — Suspended Count
— Имя процесса — Process Name
— Индикатор флага — Flag Indicator
— Приостановленный индикатор — Suspended indicator

Средства: Tools:

— Поиск — Search
— Поиск в стеке вызовов — Search Call Stack
— Отметить только мой код — Flag Just My Code
— Пометить выбранные пользовательские модули — Flag Custom Module Selection
— Группировать по — Group by
— Столбцы — Columns
— Развернуть/свернуть стеки вызовов — Expand/Collapse callstacks
— Развернуть или свернуть группы — Expand/Collapse groups
— Заморозить/разморозить потоки — Freeze/Thaw Threads

Контекстное меню: Shortcut menu:

— Показать потоки в исходном коде — Show threads in source
— Переключиться в поток — Switch to a thread
— Заморозить выполняющийся поток — Freeze a running thread
— Разморозить замороженный поток — Thaw a frozen thread
— Пометить поток для дополнительного изучения — Flag a thread for additional study
— Снять отметку потока — Unflag a thread
— Переименовать поток — Rename a thread
— Отобразить и скрыть потоки — Show and hide threads

Отладка нескольких процессов (C#, Visual Basic, C++) Debug multiple processes (C#, Visual Basic, C++)

В Visual Studio можно выполнять отладку решения, имеющего несколько процессов. Visual Studio can debug a solution that has several processes. Можно запускать несколько процессов, переключаться между ними, прерывать и возобновлять их выполнение, пошагово проходить исходный код, останавливать отладку, завершать отдельные процессы или отсоединяться от них. You can start and switch between processes, break, continue, and step through source, stop debugging, and end or detach from individual processes.

Запуск отладки с несколькими процессами Start debugging with multiple processes

Если в решении Visual Studio могут независимо выполняться несколько проектов, можно выбрать проект, запускаемый отладчиком. When more than one project in a Visual Studio solution can run independently, you can select which project the debugger starts. Текущий запускаемый проект отображается полужирным шрифтом в обозревателе решений. The current startup project appears in bold in Solution Explorer.

Чтобы изменить запускаемый проект, правой кнопкой мыши щелкните имя другого проекта в обозревателе решений и выберите Назначить запускаемым проектом. To change the startup project, in Solution Explorer, right-click a different project and select Set as StartUp Project.

Чтобы начать отладку проекта из обозревателя решений без его назначения запускаемым, щелкните проект правой кнопкой мыши и выберите Отладка > Запустить новый экземпляр или Шаг с заходом в новый экземпляр. To start debugging a project from Solution Explorer without making it the startup project, right-click the project and select Debug > Start new instance or Step into new instance.

Назначение запускаемого проекта или нескольких проектов на странице свойств решения To set the startup project or multiple projects from solution Properties:

Выберите решение в обозревателе решений и щелкните значок Свойства на панели инструментов либо щелкните это решение правой кнопкой мыши и выберите пункт Свойства. Select the solution in Solution Explorer and then select the Properties icon in the toolbar, or right-click the solution and select Properties.

На странице Свойства выберите Общие свойства > Запускаемый проект. On the Properties page, select Common Properties > Startup Project.

Выберите Текущий выбор, Один запускаемый проект и файл проекта либо выберите Несколько запускаемых проектов. Select Current selection, Single startup project and a project file, or Multiple startup projects.

Если выбран параметр Несколько запускаемых проектов, можно изменить порядок запуска и действие для каждого проекта: Запустить, Запустить без отладки или Нет. If you select Multiple startup projects, you can change the startup order and action to take for each project: Start, Start without debugging, or None.

Нажмите Применить или OK, чтобы применить изменения и закрыть диалоговое окно. Select Apply, or OK to apply and close the dialog.

Присоединение к процессу Attach to a process

Отладчик также может присоединяться к приложениям, выполняемым в процессах вне Visual Studio, включая процессы на удаленных устройствах. The debugger can also attach to apps running in processes outside of Visual Studio, including on remote devices. После присоединения к приложению можно использовать отладчик Visual Studio. After you attach to an app, you can use the Visual Studio debugger. Функции отладки могут быть ограничены. Debugging features might be limited. Это зависит от того, было ли приложение построено с отладочной информацией, есть ли у вас доступ к исходному коду приложения и отслеживает ли JIT-компилятор отладочную информацию. It depends on whether the app was built with debug information, whether you have access to the app’s source code, and whether the JIT compiler is tracking debug information.

Дополнительные сведения см. в статье Присоединение к выполняемым процессам. For more information, see Attach to running processes.

Присоединение к выполняющемуся процессу: To attach to a running process:

После запуска приложения выберите Отладка > Присоединить к процессу. With the app running, select Debug > Attach to Process.

В диалоговом окне Присоединение к процессу выделите процесс в списке Доступные процессы и щелкните Присоединить. In the Attach to Process dialog box, select the process from the Available Processes list, and then select Attach.

Отладчик не присоединяется автоматически к дочернему процессу, который запущен отлаживаемым процессом, даже если дочерний проект находится в том же решении. The debugger does not automatically attach to a child process that is started by a debugged process, even if the child project is in the same solution. Чтобы выполнить отладку дочернего процесса, подключитесь к дочернему процессу после его запуска или настройте редактор реестра Windows для запуска дочернего процесса в новом экземпляре отладчика. To debug a child process, either attach to the child process after it starts, or configure the Windows Registry Editor to start the child process in a new debugger instance.

Использование редактора реестра для автоматического запуска процесса в отладчике Use the Registry Editor to automatically start a process in the debugger

В некоторых случаях может потребоваться отладить код запуска для приложения, которое запускается другим процессом. Sometimes, you might need to debug the startup code for an app that is launched by another process. К ним относятся службы и действия пользовательской настройки. Examples include services and custom setup actions. Можно запустить отладчик и автоматически присоединить его к приложению. You can have the debugger launch and automatically attach to the app.

Запустите редактор реестра Windows с помощью regedit.exe. Start the Windows Registry Editor by running regedit.exe.

В редакторе реестра перейдите к параметрам выполнения файла HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image. In Registry Editor, navigate to HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options.

Выберите папку приложения, которое требуется запустить в отладчике. Select the folder of the app that you want to start in the debugger.

Если приложение не указано в качестве дочерней папки, щелкните правой кнопкой мыши Параметры выполнения файла образа, выберите Создать > Раздел и введите имя приложения. If the app isn’t listed as a child folder, right-click Image File Execution Options, select New > Key, and type the app name. Или щелкните правой кнопкой мыши новый раздел в дереве, выберите команду Переименовать, а затем введите имя приложения. Or, right-click the new key in the tree, select Rename, and then enter the app name.

Щелкните правой кнопкой мыши новый раздел в дереве и выберите Создать > Строковое значение. Right-click the new key in the tree and select New > String Value.

Измените имя нового значения с Новое значение № 1 на debugger . Change the name of the new value from New Value #1 to debugger .

Щелкните debugger правой кнопкой мыши и выберите Изменить. Right-click debugger and select Modify.

В диалоговом окне Изменение строки введите vsjitdebugger.exe в поле Данные значения, а затем нажмите кнопку OK. In the Edit String dialog box, type vsjitdebugger.exe in the Value data box, and then select OK.

Отладка с несколькими процессами Debug with multiple processes

При отладке приложения с несколькими процессами команды прерывания, пошагового выполнения и продолжения выполнения затрагивают все процессы по умолчанию. When debugging an app with several processes, the breaking, stepping, and continuing debugger commands affect all processes by default. Например, когда процесс приостанавливается в точке останова, выполнение всех остальных процессов также приостанавливается. For example, when a process is suspended at a breakpoint, the execution of all other processes is also suspended. Можно изменить это принимаемое по умолчанию поведение, чтобы обрести больший контроль над целевыми объектами команд выполнения. You can change this default behavior, to gain more control over the targets of execution commands.

Включение или отключение приостановки всех процессов при прерывании одного процесса To change whether all processes are suspended when one process breaks:

  • Выберите Сервис (или Отладка) >Параметры >Отладка >Общие, затем установите или снимите флажок Прерывать все процессы при прерывании одного процесса. Under Tools (or Debug) >Options >Debugging >General, select or clear the Break all processes when one process breaks check box.

Команды прерывания, пошагового выполнения и продолжения выполнения Break, step, and continue commands

В следующей таблице описано действие команд отладки при установке или снятии флажка Прерывать все процессы при прерывании одного процесса. The following table describes the behaviors of debugging commands when the Break all processes when one process breaks check box is selected or deselected:

Команда Command Selected Selected Выбор отменен Deselected
Отладка > Остановить все Debug > Break All Все процессы приостанавливаются. All processes break. Все процессы приостанавливаются. All processes break.
Отладка > Продолжить Debug > Continue Все процессы возобновляются. All processes resume. Все приостановленные процессы возобновляются. All suspended processes resume.
Отладка > Шаг с заходом, Шаг с обходом или Шаг с выходом Debug > Step Into, Step Over, or Step Out Во время выполнения шага текущего процесса все процессы выполняются. All processes run while current process steps.
Затем все процессы приостанавливаются. Then all processes break.
Текущий процесс выполняется пошагово. Current process steps.
Приостановленные процессы возобновляются. Suspended processes resume.
Выполняемые процессы продолжают выполняться. Running processes continue.
Отладка > Шаг с заходом (только текущий процесс) , Шаг с обходом (только текущий процесс) или Шаг с выходом (только текущий процесс) Debug > Step Into Current Process, Step Over Current Process, or Step Out Current Process Н/Д N/A Текущий процесс выполняется пошагово. Current process steps.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться). Other processes maintain their existing state (suspended or running).
Окно исходного кода — Точка остановка Source window Breakpoint Все процессы приостанавливаются. All processes break. Приостанавливается только процесс окна исходного кода. Only source window process breaks.
Окно исходного кода — Выполнить до курсора Source window Run to cursor
Окно исходного кода должно находиться в текущем процессе. The source window must be in the current process.
Все процессы выполняются, а процесс в окне исходного кода выполняется до курсора и приостанавливается. All processes run while source window process runs to cursor and then breaks.
После этого приостанавливаются все остальные процессы. Then all other processes break.
Процесс в окне исходного кода выполняется до курсора. Source window process runs to cursor.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться). Other processes maintain their existing state (suspended or running).
Окно Процессы > Остановить процесс Processes window > Break Process Н/Д N/A Выбранный процесс приостанавливается. Selected process breaks.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться). Other processes maintain their existing state (suspended or running).
Окно Процессы > Продолжить процесс Processes window > Continue Process Н/Д N/A Выбранный процесс возобновляется. Selected process resumes.
Остальные процессы сохраняют свое текущее состояние (остаются приостановленными или продолжают выполняться). Other processes maintain their existing state (suspended or running).

Поиск исходных файлов и файлов символов (PDB) Find the source and symbol (.pdb) files

Для перехода по исходному коду процесса отладчику требуется доступ к исходным файлам и файлам символов процесса. To navigate the source code of a process, the debugger needs access to its source files and symbol files. Дополнительные сведения см. в разделе Указание файлов символов (PDB) и исходных файлов. For more information, see Specify symbol (.pdb) and source files.

Если не удается получить доступ к файлам процесса, для перемещения можно воспользоваться окном Дизассемблирование. If you can’t access the files for a process, you can navigate by using the Disassembly window. Дополнительные сведения см. в разделе Практическое руководство. использовать окно дизассемблирования. For more information, see How to: Use the Disassembly window.

Переключение между процессами Switch between processes

Во время отладки можно подключиться к нескольким процессам, но в любой момент времени только один из них будет активным в отладчике. You can attach to multiple processes when you’re debugging, but only one process is active in the debugger at any given time. Активный или текущий процесс можно выбрать с помощью панели инструментов Место отладки или в окне Процессы. You can set the active or current process in the Debug Location toolbar, or in the Processes window. Для переключения между процессами оба процесса должны находиться в режиме приостановки выполнения. To switch between processes, both processes must be in break mode.

Установка текущего процесса на панели инструментов «Место отладки» To set the current process from the Debug Location toolbar:

Чтобы открыть панель инструментов Место отладки, выберите Вид > Панели инструментов > Место отладки. To open the Debug Location toolbar, select View > Toolbars > Debug Location.

Во время отладки на панели инструментов Место отладки в раскрывающемся списке Процесс выберите процесс, который необходимо задать в качестве текущего. During debugging, on the Debug Location toolbar, select the process you want to set as the current process from the Process dropdown.

Установка текущего процесса в окне «Процессы» To set the current process from the Processes window:

Чтобы открыть окно Процессы, во время отладки выберите Отладка > Окна > Процессы. To open the Processes window, while debugging, select Debug > Windows > Processes.

В окне Процессы текущий процесс будет отмечен желтой стрелкой. In the Processes window, the current process is marked by a yellow arrow. Дважды щелкните процесс, который необходимо задать в качестве текущего. Double-click the process you want to set as the current process.

Переключение к процессу делает этот процесс текущим процессом для отладки. Switching to a process sets it as the current process for debugging purposes. Статус текущего процесса отображается в окнах отладчика, и все команды пошагового выполнения влияют только на текущий процесс. Debugger windows show the state for the current process, and stepping commands affect only the current process.

Остановка отладки с несколькими процессами Stop debugging with multiple processes

По умолчанию при выборе Отладка > Остановить отладку отладчик завершается или отсоединяется от всех процессов. By default, when you select Debug > Stop Debugging, the debugger ends or detaches from all processes.

Если в отладчике был запущен текущий процесс, этот процесс завершается. If the current process was launched in the debugger, the process is ended.

Если отладчик был присоединен к текущему процессу, отладчик отсоединяется от процесса, не прекращая его выполнение. If you attached the debugger to the current process, the debugger detaches from the process and leaves the process running.

Если отладка процесса запущена из решения Visual Studio, присоединитесь к другому уже запущенному процессу, затем выберите Остановить отладку и сеанс отладки завершится. If you start debugging a process from a Visual Studio solution, then attach to another process that is already running, and then choose Stop Debugging, the debugging session ends. Процесс, запущенный в Visual Studio, завершится, а процесс, к которому вы присоединились, продолжит выполняться. The process that was started in Visual Studio ends, while the process you attached to keeps running.

Чтобы управлять влиянием параметра Остановить отладку на отдельный процесс, в окне Процессы щелкните процесс правой кнопкой мыши и выберите или снимите флажок Отсоединиться при остановке отладки. To control the way that Stop Debugging affects an individual process, in the Processes window, right-click a process, and then select or clear the Detach when debugging stopped check box.

Параметр отладчика Прерывать все процессы при прерывании одного не влияет на поведение остановки, завершения процессов и отсоединения от процессов. The Break all processes when one process breaks debugger option does not affect stopping, terminating, or detaching from processes.

Команды остановки, окончания и отсоединения Stop, terminate, and detach commands

В следующей таблице описаны действия команд отладчика по остановке, завершению и отсоединению с несколькими процессами. The following table describes the behaviors of the debugger stop, terminate, and detach commands with multiple processes:

Читайте также:  Как windows присваивает буквы дисками
Оцените статью