Programadores => Código de la Semana => Mensaje iniciado por: ethernet en 01 de Diciembre de 2002, 04:34:59 pm

Título: Trace para VC++ - Mauro Leggieri
Publicado por: ethernet en 01 de Diciembre de 2002, 04:34:59 pm
Código: [Seleccionar]

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++)
Código: [Seleccionar]

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;

 

}


Título: Trace para VC++ - Mauro Leggieri
Publicado por: ethernet en 01 de Diciembre de 2002, 04:37:44 pm
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
Título: Trace para VC++ - Mauro Leggieri
Publicado por: deadLock++ en 11 de Diciembre de 2002, 11:17:33 pm
                                ¿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++