Archivo

Archivo para la categoría ‘Debug’

Primera versión pública de la aplicación DebugStringView (v.1.1)

martes, 1 de abril de 2025 2 comentarios
Share Button

Hace unos días ya hablé en esta entrada de la API de Windows OutputDebugString y de cómo nos puede ser útil en nuestro día a día de programar cuando realizamos debug de nuestros programas.

También comenté en su día sobre algunas herramientas que nos ayudan a visualizar los mensajes que desde nuestras aplicaciones enviamos a la consola de debug. Las he utilizado (las 2 que comento en la entrada) y funcionan bien, pero al final no se ajustan a lo que a mi me gustaría o no tienen todo lo que a mi me gustaría que tuvieran; Algunas características están disponibles en una y al gunas en la otra. Así que mi decisión ha sido crear una nueva «a mi gusto» que tenga todo lo que yo quiero o necesito.

Tal vez no esté todo en esta primera versión, pero mi idea es ir completándola poco a poco con más características que tengo en mente.  De aquí es de dónde ha salido este nuevo proyecto (herramienta DebugStringView).

El código fuente está disponible en mi repositorio de Github y es gratuita y de libre uso. Para no alargar más esta entrada de «Presentación» os remito a la propia de la aplicación, ahí tenéis más información.

https://neftali.clubdelphi.com/debugstringview/

Ahí será donde vaya actualizando todo lo referente a esta herramienta.
Para descargar binarios podéis hacerlo desde aquí (página específica de la aplicación) , donde ya está disponible la descarga de los binarios (32 y 64 bits) en formato ZIP. No requiere instalación.

Para los que la utilicéis, os agradecería que me enviaseis comentarios y por supuesto posibles errores que encontréis y cualquier sugerencia de mejora que consideréis.

Función OutputDebugString: Un avance en tu código

miércoles, 12 de marzo de 2025 2 comentarios
Share Button

Muchos de vosotros seguro que ya habéis utilizado esta función de Windows durante el desarrollo y prueba de nuestros programas. Para los que no la habéis utilizado, la definición formal podría ser la siguiente:

«OutputDebugString es una función de la API de Windows que permite enviar mensajes de depuración al visor de depuración de Windows. Estos mensajes pueden ser utilizados para realizar depuración y diagnóstico de aplicaciones en tiempo de ejecución.»

Seguro que todos, en algún momento de nuestra vida como programadores, hemos utilizado un ShowMessage en nuestro programa para mostrar una información de debug (o de log) por pantalla. Esto tiene sus inconvenientes y riesgos, como que en un momento dado se nos haya escapado uno de esos ShowMessage y haya acabado en un cliente final Decepcionado .

Para evitar esos posibles problemas podemos utilizar la función OutputDebugString. Desde Delphi basta con añadir la unit Windows a nuestro código para poder utilizarla.

Por ejemplo, si creamos un proyecto de consola como este y lo ejecutamos:

program Project1;
 
{$APPTYPE CONSOLE}
 
{$R *.res}
uses
  Windows, System.SysUtils;
 
begin
  var i:integer;
  while i < 10 do begin
    OutputDebugString(PChar(' ==» Mensaje ' + i.ToString + ' **'));
    Inc(i);
  end;
end.

Aparentemente al ejecutar nuestro programa no pasa nada, y no vemos nada en pantalla, pero si activamos la ventana de Eventos en el IDE (View / Debug Windows / Events  CTRL+ALT+V) debería salir algo como esto:


En el IDE de Delphi disponemos de muchas herramientas para depurar/debuggar nuestros programas y esta es una de ellas, pero ¿qué pasa cuando no disponemos del IDE? (por ejemplo, porque necesitamos probar un programa en un cliente y obtener información de lo que está pasando).

Podemos utilizar alguna de estas herramientas que nos permiten ver los mensajes de debug (generados con OutputDebugString):

La visualización que obtenemos con esta herramientas es la siguiente:

Dentro de las opcines del IDE (Tools/Options/Debugger) podemos realizar modificaciones en lo que se refiere a los mensajes de debug que podemos visualizar dentro de la ventana de Event log.

Por último una recomendación personal. Para evitar que nuestros mensajes de Debug puedan llegar a una versión de cliente, es buena práctica utilizar condicionales en el código, de esta forma podemos asegurarnos que en nuestros ejecutables compilados en DEBUG, sí aparecen los mensajes, pero los compilador en RELEASE (copias finales de cliente) no aparecen.

Símplemente debéis crear un procedimiento como el siguiente:

procedure _DebugStr(const aMensaje:string);
begin
{$IFDEF DEBUG}
  OutputDebugString(PChar(aMensaje));
{$ENDIF}
end;

 

Hasta aquí esta entrada, que está centrada en el uso de la función y en cómo sacarle partido. Más adelante veremos cómo generar código para capturar estos mensajes y mostrarlos donde nos interese, e incluso una aplicación «a medida» que se ajuste a lo que necesitamos.

Referencias:

Un saludo y hasta la próxima.

 

 

Categories: API, Código, Debug, Delphi, OOP Tags: , , , ,