- Средства для отладки потоков и процессов в Visual Studio Tools to debug threads and processes in Visual Studio
- Инструменты и возможности Tools and features
- Отладка нескольких процессов (C#, Visual Basic, C++) Debug multiple processes (C#, Visual Basic, C++)
- Запуск отладки с несколькими процессами Start debugging with multiple processes
- Присоединение к процессу Attach to a process
- Использование редактора реестра для автоматического запуска процесса в отладчике Use the Registry Editor to automatically start a process in the debugger
- Отладка с несколькими процессами Debug with multiple processes
- Команды прерывания, пошагового выполнения и продолжения выполнения Break, step, and continue commands
- Поиск исходных файлов и файлов символов (PDB) Find the source and symbol (.pdb) files
- Переключение между процессами Switch between processes
- Остановка отладки с несколькими процессами Stop debugging with multiple processes
- Команды остановки, окончания и отсоединения Stop, terminate, and detach commands
Средства для отладки потоков и процессов в 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) | Выберите процесс для присоединения Select a process to attach to Выберите удаленный компьютер Select a remote computer Измените тип транспортного протокола для подключения к удаленным компьютерам Change transport type for connecting to remote computers | |||||||||||||||||||||||||||
Окно процессов Processes window | Присоединенные процессы: Attached Processes: — Имя процесса — Process Name | Средства: Tools: — Присоединить — Attach Контекстное меню: Shortcut menu: — Присоединить — Attach | |||||||||||||||||||||||||||
Окно Потоки Threads window | Потоки текущего процесса: Threads in current process: — Идентификатор потока — Thread ID | Средства: Tools: — Поиск — Search Контекстное меню: Shortcut menu: — Показать потоки в исходном коде — Show threads in source Отладка нескольких процессов (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:
Команды прерывания, пошагового выполнения и продолжения выполнения 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:
Поиск исходных файлов и файлов символов (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: |