Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
DatabaseDelphiIDENoticiasTech Partner

Nuevo complemento IDE: depurador paralelo de Parnassus

parallel debugger demo screenshot 3

Marcado de editor de código avanzado, IU de pila de llamadas y herramientas de depuración multiproceso: en un nuevo complemento para RAD Studio ahora disponible gratuitamente.

Nos complace anunciar una nueva extensión IDE disponible hoy para RAD Studio 10.4.1, creada por el mismo autor que los populares complementos de marcadores y navegador, Parnassus. Si está leyendo esto, ya está disponible en GetIt para cualquier persona con suscripción de actualización: simplemente abra GetIt, vaya a la sección Complementos IDE e instale el ‘Depurador paralelo’. Requiere Delphi o C ++ Builder 10.4.1 o más reciente.

¿Qué es?

  • Una herramienta para depurar aplicaciones multiproceso
  • … ¡Y también ayuda a depurar las aplicaciones tradicionales de un solo hilo!

Algo para todos. ¡Sigue leyendo para más información!

editor before and after 2

Algunas de las nuevas marcas del editor, útiles para ti incluso si no usas varios hilos en tu aplicación

El problema

Si tiene más de un hilo en su aplicación, probablemente haya querido depurar la interacción del hilo. La vista de un IDE tradicional de una aplicación depurada, si bien puede enumerar varios subprocesos en una vista de subprocesos, es tratar la aplicación como si tuviera un solo subproceso: verá solo una pila de llamadas y los controles de ejecución / pausa / paso son para todo el proceso. Esto lo deja a usted, un desarrollador que tiene que depurar su aplicación, con preguntas como:

  • ¿Cómo veo si se ejecutan varios subprocesos en el mismo código a la vez?
  • ¿Cómo veo lo que están haciendo todos mis hilos al mismo tiempo?
  • ¿Cómo paso por un método en un solo hilo?
    Es decir, ¿cómo depuro un hilo sin que otros hilos se ejecuten y ejecuten código que no quiero que hagan, alcanzando puntos de interrupción, etc.?
  • ¿Cuánta CPU utiliza cada uno de mis subprocesos? ¿Son eficientes?

Y quizás otras preguntas o deseos, incluso depurando solo en un solo hilo, como:

  • Desearía que fuera fácil ver todos los métodos en la pila de llamadas resaltados en mi código
  • Ojalá pudiera hacer que un punto de interrupción solo se aplique a un hilo en particular
  • Desearía que el marcado del editor que muestra la línea de código actual parezca un poco más obvio
  • Ojalá, al pausar el proceso, no me llevara a la vista de la CPU, sino que me mostrara solo mi propia fuente

Cada uno de estos es respondido por este nuevo complemento.

Repasemos sus características. En la siguiente sección, leerá sobre la vista de subprocesos paralelos y las pilas de llamadas paralelas; ejecución y paso por hilo; la vista Proceso; nuevo marcado del editor que incluye hilos y pilas de llamadas en el editor; establecer la afinidad del hilo de un punto de interrupción; mover la ejecución actual; el nuevo menú principal de Thread; y más…

La vista de subprocesos paralelos

Ver> Depurar ventanas> Subprocesos paralelos

Esta ventana enumera todos los hilos del proceso, enumerados horizontalmente. Cuando su aplicación se está ejecutando, si está en Windows, cada hilo tiene un gráfico que muestra su uso de CPU.

parallel threads cpu

Cuando la aplicación está en pausa, cada hilo muestra su pila de llamadas.

parallel threads call stack

  • A cada hilo se le asigna un color único , comenzando con un azul medio para el hilo principal de la aplicación. Este color se utiliza como guía visual para identificar el hilo en todas partes.
  • Se muestran los nombres de los hilos. Incluso si no nombra su hilo principal, Parallel Debugger es lo suficientemente inteligente como para detectarlo.
  • El hilo actual está en negrita y tiene un borde delgado de su color alrededor. Haga doble clic en el título de un hilo (su nombre) para convertirlo en el hilo actual.
  • Las entradas de la pila de llamadas sin código fuente, es decir, no depurables sin usar la vista de la CPU, se contraen de forma predeterminada. Puede expandirlos (o desactivarlo para mostrar una pila de llamadas tradicional).

Al pausar el proceso, el depurador siempre mostrará la entrada de la pila de llamadas depurable superior. Es decir, es posible que no muestre la entrada superior en la pila de llamadas como lo hace tradicionalmente el IDE, pero mostrará el código fuente suyo que llama a él. La idea aquí es depurar aquello sobre lo que tiene control; mostrar siempre la fuente.

El botón más a la izquierda en cada barra de herramientas de hilo pausa todo el proceso, haciendo que ese hilo sea el hilo actual. Es ‘pausar el proceso en este hilo’. El botón más a la derecha le permite cambiar el orden en que se muestran los hilos, fijándolos a la izquierda o al lado de otro hilo fijado. Esto es útil cuando tienes muchos hilos en tu aplicación y quieres mantener agrupados los que te interesan. Si un hilo fijo tiene un nombre, el anclaje es persistente en los reinicios del proceso: cuando finaliza y reinicia su aplicación, se fijarán los mismos hilos.

Ejecución o paso de un solo hilo

Los botones restantes de la barra de herramientas son para el control de la ejecución del hilo.

Los controles normales de ejecución, paso sobre, paso dentro, etc. del IDE son a nivel de proceso; es decir, ejecutarán todo el proceso, despertando todos los subprocesos, y solo espera que no ocurra nada más hasta que se complete la operación de paso en el subproceso que está viendo. En la práctica, muchos pueden (excepciones, puntos de interrupción, etc.) y, por supuesto, a veces solo desea asegurarse de que otros subprocesos no se ejecuten mientras se depura un solo subproceso.

thread control buttons onlyEstos botones de la barra de herramientas le permiten correr y pisar un nivel por hilo. Usted puede:

  • Ejecute solo este hilo, manteniendo todos los demás hilos en pausa
  • Mantenga este hilo en pausa, pero ejecute todos los demás hilos
  • Ingrese a un método, solo en este hilo
  • Pase sobre una línea de código, solo en este hilo. Esto permite que solo este hilo se ejecute y pase; no se permite que otros subprocesos se ejecuten al mismo tiempo
  • Ejecutar hasta que el método regrese, solo para este hilo

Para usarlos, asegúrese de que el hilo que le interesa sea el hilo actual, haciendo doble clic en su título o nombre. Verá que dibuja su título en negrita.

Cada uno de estos tiene un atajo de teclado, lo que significa que puede pasar (etc.) a través del teclado, no solo haciendo clic en un botón con el mouse. Los accesos directos son visibles en el menú Tema que tiene elementos de menú para el tema actual (ver más abajo).

El control de ejecución por subproceso es una de las características más poderosas del depurador paralelo.

Integración del editor

Una tarea importante a la hora de comprender lo que sucede en una aplicación multiproceso es saber cuándo se están ejecutando varios subprocesos en la misma área de código. Parallel Debugger deja esto en claro agregando marcas en el editor para la pila de llamadas completa de cada hilo. Estos se muestran a través de ‘etiquetas’, pequeños marcadores de colores en el lado derecho del editor.

La entrada de la pila de llamadas superior, es decir, donde el hilo se está ejecutando ‘ahora’, está marcada con una etiqueta de color sólido, usando el color del hilo. Otras entradas de la pila de llamadas para el mismo hilo están en una versión desvaída del color del hilo (teniendo en cuenta que el hilo todavía está marcado con un círculo sólido en la etiqueta).

editor tags 2

Esto le permite leer rápidamente su código y saber, ‘Thread X se está ejecutando en algún lugar dentro de esta línea de código’ y ‘Thread Y y Thread Z están ambos en el mismo método en este momento’. Incluso verá dónde están exactamente los hilos. En esta captura de pantalla, el hilo actual es el azul y un segundo hilo (rojo claro) se está ejecutando con su punto de ejecución actual dentro de IsPrime (), pero la llamada a IsPrime resaltó la línea sobre el punto de ejecución del hilo actual.

Ejecución en movimiento

Antes de instalar el complemento, el IDE solía mostrar el punto de ejecución del hilo actual con una pequeña flecha azul. Eso ahora se reemplaza con un gran cheurón en el lado izquierdo del editor de código.

moving execution point

Puede cambiar dónde está el punto de ejecución, desde dónde comenzará a ejecutarse el hilo la próxima vez que presione Ejecutar o Paso, simplemente haciendo clic y arrastrando este marcador.

Afinidad de subproceso de punto de interrupción

thread affinity menu

todos los hilos. Antes de instalar el complemento, los puntos de interrupción se dibujaban con un punto rojo, pero con el depurador paralelo se dan colores a los hilos, y rojo significa hilo rojo. Los puntos de interrupción que se aplican a todos los hilos ahora se dibujan como una rueda multicolor.

Para que un punto de interrupción se aplique solo a un hilo específico, haga clic con el botón derecho en el punto de interrupción. El nuevo menú Breakpoint le permite elegir un hilo al que se aplicará el breakpoint.

breakpoint green thread 4

Aquí, este punto de interrupción solo se aplica al hilo verde.

La vista Proceso

Ver> Depurar ventanas> Proceso

process view 2

conjunto. Muestra el uso de CPU a nivel de proceso (nuevamente dividido en kernel y modo de usuario), el tipo de proceso (por ejemplo, Wow64), y tiene botones de ejecución / pausa / reinicio, etc. Estos son a nivel de proceso, es decir, proporcionan la misma funcionalidad que la barra de herramientas de ejecución del propio IDE.

También puede ver una lista de hilos haciendo clic en el botón en la parte inferior, como una forma rápida de elegir el hilo actual (ya que desplazarse horizontalmente en la vista de hilos puede llevar más tiempo si tiene muchos hilos).

El menú principal de Thread

thread main menu

El IDE ahora tiene un menú Thread, ubicado a la derecha del menú Run. Esto proporciona un menú para la mayoría de las operaciones directas que puede realizar para un hilo. Le permite establecer el hilo de interés (es decir, el hilo actual si el proceso está en pausa, o el hilo que desea que se convierta en el hilo actual la próxima vez que haga una pausa), y para el hilo actual tiene elementos de menú para el control de ejecución del hilo. Puede ver atajos en estos elementos del menú.

También enumera cada subproceso en la aplicación, y para cada uno muestra que ejecuta el control más la fijación, efectivamente las mismas características que en la vista Subprocesos paralelos.

Nivel de característica

thread menu feature level 2

Finalmente, el elemento del menú superior controla el nivel de funciones del depurador paralelo: lo que hace cuando su aplicación se está ejecutando. El nivel más bajo es solo para rastrear el uso de la CPU: use esto si desea que se instale el depurador paralelo, pero no desea usarlo activamente para esta aplicación actualmente. Los siguientes dos niveles controlan la profundidad con la que el depurador rastrea las pilas de llamadas de subprocesos.

Use esto si tiene docenas o cientos de hilos. En esta situación, es probable que solo le interese un subconjunto de hilos. Establezca el nivel de función en ‘Solo pilas de llamadas seleccionadas’, y el depurador paralelo rastreará las pilas de llamadas para el subproceso principal, subprocesos anclados y el subproceso actual solo de forma predeterminada. Siempre puede obtener la pila de llamadas para cualquier subproceso haciendo clic en un botón que se muestra sobre el área de la pila de llamadas en la vista Subprocesos.

Plataformas compatibles

Parallel Debugger tiene una funcionalidad completa al depurar aplicaciones localmente en Windows.

En otras plataformas, o en la depuración remota, la funcionalidad depende de lo que admita el depurador. El uso de CPU solo es compatible con aplicaciones de Windows locales (depuración no remota). El paso o ejecución por hilo solo funcionará en plataformas que admitan la congelación de hilos. Existe un problema conocido para C ++ Win64 donde las pilas de llamadas no se pueden evaluar: esto se solucionará en una próxima versión de C ++ Builder.

Siguiendo una tradición de Parnassus que comenzó con los marcadores, el depurador paralelo realmente resuelve un error. ( RSP-29768 .)

En general: si usa Windows, el depurador tiene funcionalidad completa.

El complemento es compatible con RAD Studio 10.4.1 (y más reciente, cuando salga 10.4.2).

Obtener el depurador paralelo

¡El depurador paralelo está en GetIt ahora!

Gracias a Embarcadero, Parnassus hace que el depurador esté disponible gratuitamente para cualquier cliente de RAD Studio con una suscripción de actualización activa. Abra GetIt, vaya a la categoría Complementos IDE y haga clic en Instalar.

Tanto Parnassus como Embarcadero esperan que esta extensión sea una gran adición a su IDE.

En una nota personal, me gustaría agradecer a Embarcadero por estar interesado en el complemento y querer agregarlo a GetIt, y a todos mis probadores beta que han usado varias versiones de este complemento de calidad que aumenta lentamente desde agosto. ¡Muchas gracias a todos!

parallel debugger demo screenshot 3


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

IN THE ARTICLES