Una simple función para depuración que utiliza elipses para igualar la facilidad de usa que posee el TRACE del VisualC++ cuando se utiliza MFC.
Complementamos la utilidad de este código con el DebugView de sysinternals (que es freeware) y la podemos descargar de aquí http://www.sysinternals.com/ntw2k/freeware...debugview.shtml.
Esta utilidad nos permitirá ver los mensajes que arroje el OutputDebugString.
De este modo utilizando cualquier compilador y sólo lenguaje C estandar podemos depurar nuestro programa facilmente.
Ejemplos de uso:
void main(void)
{
int nValor = 4;
char * str = "stratos AD";
// ...
trace("Valor: %d Nombre %s", nValor, str);
// ...
}
Mejoras: En mi caso la función trace es en realidad un método de una clase y szBuf es una propiedad de dicha clase, de este modo no es necesario asignar 256 bytes en el heap cada vez que se invoca la función sino que se asigna en el constructor de la clase una sola vez.
También podría ser declarada como static.
Saludos.
Diego G. Ruiz (deadLock++)
void trace(char * pszText, ....)
{
va_list argptr;
short i;
char szBuf[256];
va_start(argptr, pszText);
i = vsprintf(szBuf, pszText, argptr);
va_end(argptr);
OutputDebugString(szBuf);
return;
}
Éste código fue enviado por Diego G. Ruiz (deadLock++) el 26 de noviembre del 2002
diego.ruiz@neptra.com
Si quieres enviar tu propio código hazlo a eth_cotd@lycos.es
Personalmente a mi me parece q esta funcion es igual q printf.
Por cierto yo pensaba q las variables locales se reservaban en la pila y para ello solo es necesario hacer una simple resta, no es tan caro como para preocuparse por ello creo yo.
saludos
¿Como igual que el printf? La función se usa de la misma manera pero el printf escribe en el STDOUT mientras que este trace realiza un OutputDebugString lo que te permite capturar el mensaje desde un debugger externo.
Respecto a tomar los parámetros de la pila ¿como salvas el chequeo de parámetros del compilador sin usar ellipses?
La idea de la función es dotar al OutputDebugString de la versatilidad del printf.
Saludos.
deadLock++