Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Trace para VC++ - Mauro Leggieri

Iniciado por ethernet, 01 de Diciembre de 2002, 04:34:59 PM

« anterior - próximo »

ethernet



    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

    ethernet

    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

    deadLock++

                                    ¿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++                                






    Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
    Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
    Muchísimas gracias.