Herramientas para depurar subprocesos y procesos en Visual StudioTools to debug threads and processes in Visual Studio

Subprocesos y procesos son conceptos relacionados en informática.Threads and processes are related concepts in computer science. Los dos representan secuencias de instrucciones que se deben ejecutar en un orden concreto.Both represent sequences of instructions that must execute in a specific order. Sin embargo, las instrucciones de subprocesos o procesos independientes se pueden ejecutar en paralelo.Instructions in separate threads or processes, however, can execute in parallel.

Los procesos existen en el sistema operativo y corresponden a lo que los usuarios consideran programas o aplicaciones.Processes exist in the operating system and correspond to what users see as programs or applications. Por otra parte, un subproceso existe dentro de un proceso.A thread, on the other hand, exists within a process. Por esta razón, los subprocesos se denominan a veces procesos ligeros.For this reason, threads are sometimes referred to as light-weight processes. Cada proceso está compuesto por uno o más subprocesos.Each process consists of one or more threads.

La existencia de varios procesos permite a un equipo realizar más de una tarea a la vez.The existence of multiple processes enables a computer to perform more than one task at a time. La existencia de varios subprocesos permite a un proceso dividir el trabajo que se va a realizar en paralelo.The existence of multiple threads enables a process to separate work to be performed in parallel. En un equipo con multiprocesadores, los procesos o subprocesos se pueden ejecutar en procesadores diferentes.On a computer with multiprocessors, processes or threads can run on different processors. Esto permite realizar un verdadero procesamiento en paralelo.This enables true parallel processing.

El procesamiento paralelo perfecto no siempre es posible.Perfect parallel processing is not always possible. En ocasiones, los subprocesos deben sincronizarse.Threads sometimes must be synchronized. Es posible que un subproceso tenga que esperar al resultado de otro subproceso, o necesite acceso exclusivo a un recurso que otro subproceso esté utilizando.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. Los problemas de sincronización son una causa común de errores en las aplicaciones multiproceso.Synchronization problems are a common cause of bugs in multithreaded applications. A veces, los subprocesos pueden acabar esperando un recurso que nunca está disponible.Sometimes threads may end up waiting for a resource that never becomes available. Esto da como resultado una condición denominada interbloqueo.This results in a condition called deadlock.

El depurador de Visual StudioVisual Studio proporciona herramientas eficaces pero fáciles de usar para depurar subprocesos y procesos.The Visual StudioVisual Studio debugger provides powerful but easy-to-use tools for debugging threads and processes.

Herramientas y característicasTools and features

Las herramientas que necesita para usar en Visual StudioVisual Studio dependen de qué tipo de código está intentando depurar:The tools you need to use in Visual StudioVisual Studio depend on what type of code you are trying to debug:

  • Para los procesos, las herramientas principales son el adjuntar al proceso cuadro de diálogo, el procesos ventana y el ubicación de depuración barra de herramientas.For processes, the primary tools are the Attach to Process dialog box, the Processes window, and the Debug Location toolbar.

  • Para los subprocesos, las herramientas principales para depurar subprocesos son la subprocesos (ventana), marcadores de subprocesos en ventanas de código fuente, pilas paralelas ventana, inspección paralela ventana, y el ubicación de depuración barra de herramientas.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.

  • Para el código que usa el Task en el tarea Parallel Library (TPL), Runtime de simultaneidad (código nativo), las herramientas principales para depurar aplicaciones multiproceso son las Pilas paralelas ventana, el inspección paralela ventana y el tareas ventana (la tareas ventana también admite la Objeto de compromiso de 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).

  • Para depurar subprocesos en la GPU, la herramienta principal es la subprocesos de GPU windows.For debugging threads on the GPU, the primary tool is the GPU Threads windows.

    La tabla siguiente muestra la información disponible y las acciones que se pueden realizar en cada uno de estos lugares:The following table shows the information available and the actions you can perform in each of these places:

Interfaz de usuarioUser Interface Información disponibleInformation Available Acciones que puede realizarActions You Can Perform
Asociar a proceso cuadro de diálogoAttach to Process dialog box Procesos disponibles que puede asociar:Available Processes you can attach to:

-Nombre del proceso (.exe)- Process name (.exe)
: Número de Id. proceso- Process ID number
: Título de la barra de menús- Menubar Title
-Tipo (administrado v4.0; Administrador v2.0, v1.1, v1.0; x86; x64; IA64)- Type (Managed v4.0; Managed v2.0, v1.1, v1.0; x86; x64; IA64)
: Nombre de usuario (nombre de cuenta)- User Name (account name)
: Número de sesión- Session number
Seleccionar un proceso para asociarSelect a process to attach to

Seleccionar un equipo remotoSelect a remote computer

Cambiar el tipo de transporte para conectar a equipos remotos.Change transport type for connecting to remote computers
Procesos ventanaProcesses window Procesos asociados:Attached Processes:

: Nombre del proceso- Process Name
: Número de Id. proceso- Process ID number
-Path para procesar .exe- Path to process .exe
: Título de la barra de menús- Menubar Title
-Estado (Inter.- State (Break. En ejecución)Running)
-Depuración (nativa, administrada y así sucesivamente).- Debugging (Native, Managed, and so on.)
-Tipo de transporte (predeterminado, nativo sin autenticación)- Transport type (default, native with no authentication)
-Calificador de transporte (equipo remoto)- Transport Qualifier (remote computer)
Herramientas:Tools:

-Adjuntar- Attach
-Separar- Detach
-Finalizar- Terminate

Menú contextual:Shortcut menu:

-Adjuntar- Attach
-Separar- Detach
-Desasociar cuando se detiene la depuración- Detach when debugging stopped
-Finalizar- Terminate
Subprocesos ventanaThreads window Subprocesos en el proceso actual:Threads in current process:

-Id. de subproceso- Thread ID
-Id. de administrado- Managed ID
-Categoría (subproceso principal, subproceso de interfaz, controlador de llamadas a procedimientos remotos o subproceso de trabajo)- Category (main thread, interface thread, remote procedure call handler, or worker thread)
-El nombre del subproceso- Thread Name
-La ubicación donde se crea el subproceso- Location where thread is created
-Prioridad- Priority
: Máscara de afinidad- Affinity Mask
-Recuento de suspensión- Suspended Count
: Nombre del proceso- Process Name
: Indicador de marca- Flag Indicator
-Indicador suspendido- Suspended indicator
Herramientas:Tools:

: Búsqueda- Search
: Pila de llamadas de búsqueda- Search Call Stack
-Marcar solo mi código- Flag Just My Code
-Marcar selección de módulos personalizados- Flag Custom Module Selection
-Agrupar por- Group by
-Columnas- Columns
-Expandir o Contraer pilas de llamadas- Expand/Collapse callstacks
-Expandir o contraer grupos- Expand/Collapse groups
-Inmovilizar o reanudar subprocesos- Freeze/Thaw Threads

Menú contextual:Shortcut menu:

-Mostrar subprocesos en código fuente- Show threads in source
-Cambiar a un subproceso- Switch to a thread
-Inmovilizar un subproceso en ejecución- Freeze a running thread
-Reanudar un subproceso inmovilizado- Thaw a frozen thread
-Marcar un subproceso para su estudio adicional- Flag a thread for additional study
-Demarcar un subproceso- Unflag a thread
-Cambiar el nombre de un subproceso- Rename a thread
-Mostrar y ocultar subprocesos- Show and hide threads

Otras acciones:Other actions:

: Permite ver la pila de llamadas para un subproceso en una información sobre datos- View the call stack for a thread in a DataTip
Ventana de código fuenteSource window Indicadores de subproceso en el margen interno izquierdo indican uno o varios subprocesos (desactivado de forma predeterminada, se activan mediante el menú contextual en subprocesos ventana)Thread indicators in left gutter indicate single or multiple threads (off by default, turned on by using shortcut menu in Threads window) Menú contextual:Shortcut menu:

-Cambiar a un subproceso- Switch to a thread
-Marcar un subproceso para su estudio adicional- Flag a thread for additional study
-Demarcar un subproceso- Unflag a thread
Ubicación de depuración barra de herramientasDebug Location toolbar -Proceso actual- Current process
-Suspender la aplicación- Suspend the application
-Reanudar la aplicación- Resume the application
-Suspender y cerrar la aplicación- Suspend and shut down the application
-Subproceso actual- Current thread
-Alternar estado marcado del subproceso actual- Toggle current thread flag state
-Mostrar sólo subprocesos marcados- Show only flagged threads
-Mostrar solo el proceso actual- Show only current process
-Marco de pila- Current stack frame
-Cambiar a otro proceso- Switch to another process
-Suspender, reanudar o cerrar la aplicación- Suspend, resume, or shut down the application
-Cambiar a otro subproceso en el proceso actual- Switch to another thread in current process
-Cambiar a otro marco de pila en el subproceso actual- Switch to another stack frame in current thread
-Marcar o desmarcar subprocesos- Flag or unflag current threads
-Mostrar sólo subprocesos marcados- Show only flagged threads
-Mostrar solo el proceso actual- Show only the current process
Pilas en paralelo ventanaParallel Stacks window -Las pilas de llamadas para varios subprocesos en una ventana.- Call stacks for multiple threads in one window.
-Marco de pila activo para cada subproceso.- Active stack frame for each thread.
-Los llamadores y destinatarios de cualquier método.- Callers and callees for any method.
-Filtrar subprocesos especificados- Filter out specified threads
-Cambiar a vista de tareas- Switch to Tasks view
-Marcar o demarcar un subproceso- Flag or unflag a thread
-Zoom- Zoom
Inspección paralela ventanaParallel Watch window -La columna de marca, en el que puede marcar un subproceso al que desea prestar especial atención.- The flag column, in which you can mark a thread that you want to pay special attention to.
-La columna del marco, en el que una flecha indica el fotograma seleccionado.- The frame column, in which an arrow indicates the selected frame.
-Una columna configurable que puede mostrar el equipo, proceso, mosaico, tarea y el subproceso.- A configurable column that can display the machine, process, tile, task, and thread.
-Marcar o demarcar un subproceso- Flag or unflag a thread
-Mostrar sólo subprocesos marcados- Display only flagged threads
-Cambiar marcos- Switch frames
-Ordenar una columna- Sort a column
-Agrupar subprocesos- Group threads
-Inmovilizar o reanudar subprocesos- Freeze or thaw threads
-exportar los datos en la ventana Inspección paralela- export the data in the Parallel Watch window
Tareas ventanaTasks window : Permite ver información acerca de Task objetos incluidos Id. de tarea, estado de la tarea (programado, ejecución, en espera, interbloqueada) y qué subproceso está asignado a la tarea.- View information about Task objects including task ID, task status (scheduled, running, waiting, deadlocked), and which thread is assigned to the task.
-Ubicación actual en la pila de llamadas.- Current location in call stack.
-Delegado pasado a la tarea en el momento de creación- Delegate passed to the task at creation time
-Pasar a la tarea actual- Switch to current task
-Marcar o desmarcar una tarea- Flag or unflag a task
-Inmovilizar o reanudar una tarea- Freeze or thaw a task
Subprocesos de GPU ventanaGPU Threads window -La columna de marca, en el que puede marcar un subproceso al que desea prestar especial atención.- The flag column, in which you can mark a thread that you want to pay special attention to.
-La columna del subproceso actual, en el que una flecha amarilla indica el subproceso actual.- The current thread column, in which a yellow arrow indicates the current thread.
-El el número de subprocesos columna, que muestra el número de subprocesos en la misma ubicación.- The Thread Count column, which displays the number of threads at the same location.
-El línea columna, que muestra la línea de código donde se encuentra cada grupo de subprocesos.- The Line column, which displays the line of code where each group of threads is located.
-El dirección columna, que muestra la dirección de instrucción que se encuentra cada grupo de subprocesos.- The Address column, which displays the instruction address where each group of threads is located.
-El ubicación columna, que es la ubicación en el código de la dirección.- The Location column, which is the location in the code of the address.
-El estado columna, que muestra si el subproceso está activo o bloqueado.- The Status column, which shows whether the thread is active or blocked.
-El icono columna, que muestra el índice del mosaico para los subprocesos de la fila.- The Tile column, which shows the tile index for the threads in the row.
-Cambiar a un subproceso diferente- Change to a different thread
: Muestra un mosaico y subproceso determinados- Display a particular tile and thread
-Mostrar u ocultar una columna- Display or hide a column
-Ordenar por una columna- Sort by a column
-Agrupar subprocesos- Group threads
-Inmovilizar o reanudar subprocesos- Freeze or thaw threads
-Marcar o demarcar un subproceso- Flag or unflag a thread
-Mostrar sólo subprocesos marcados- Display only flagged threads

Vea tambiénSee Also

Adjuntar a procesos en ejecución Attach to Running Processes
Depurar aplicaciones multiproceso Debug Multithreaded Applications
Depurar código de GPUDebugging GPU Code