13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 124 — #162<br />

✐<br />

Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />

3.9. Consejos para depuración<br />

En un <strong>en</strong>torno ideal, habrá un depurador excel<strong>en</strong>te disponible que hará que el<br />

comportami<strong>en</strong>to de su programa sea transpar<strong>en</strong>te y podrá descubrir cualquier error<br />

rápidam<strong>en</strong>te. Sin embargo, muchos depuradores ti<strong>en</strong><strong>en</strong> puntos débiles, y eso puede<br />

requerir t<strong>en</strong>ga que añadir trozos de código a su programa que le ayud<strong>en</strong> a <strong>en</strong>t<strong>en</strong>der<br />

que está pasando. Además, puede que para la plataforma para la que esté desarrollando<br />

(por ejemplo <strong>en</strong> sistemas empotrados, con lo que yo tuve que tratar durante<br />

mis años de formación) no haya ningún depurador disponible, y quizá t<strong>en</strong>ga una realim<strong>en</strong>tación<br />

muy limitada (por ejemplo, un display de LEDs de una línea). En esos<br />

casos debe ser creativo a la hora de descubrir y repres<strong>en</strong>tar información acerca de la<br />

ejecución de su programa. Esta sección sugiere algunas técnicas para conseguirlo.<br />

3.9.1. Banderas para depuración<br />

Si coloca el código de depuración mezclado con un programa, t<strong>en</strong>drá problemas.<br />

Empezará a t<strong>en</strong>er demasiada información, que hará que los errores sean difíciles de<br />

aislar. Cuando cree que ha <strong>en</strong>contrado el error empieza a quitar el código de depuración,<br />

sólo para darse cu<strong>en</strong>ta que necesita ponerlo de nuevo. Puede resolver estos<br />

problemas con dos tipos de banderas: banderas de depuración del preprocesador y<br />

banderas de depuración <strong>en</strong> ejecución.<br />

Banderas de depuración para el preprocesador<br />

Usando el preprocesador para definir (con #define) una o más banderas de<br />

depuración (preferiblem<strong>en</strong>te <strong>en</strong> un fichero de cabecera), puede probar una bandera<br />

usando una s<strong>en</strong>t<strong>en</strong>cia #ifdef e incluir condicionalm<strong>en</strong>te código de depuración.<br />

Cuando crea que la depuración ha terminado, simplem<strong>en</strong>te utilice #undef la bandera<br />

y el código quedará eliminado automáticam<strong>en</strong>te (y reducirá el tamaño y sobrecarga<br />

del fichero ejecutable).<br />

Es mejor decidir los nombres de las banderas de depuración antes de empezar a<br />

contruir el proyecto para que los nombres sean consist<strong>en</strong>tes. Las banderas del preprocesador<br />

tradicionalm<strong>en</strong>te se distingu<strong>en</strong> de las variables porque se escrib<strong>en</strong> todo<br />

<strong>en</strong> mayúsculas. Un nombre habitual es simplem<strong>en</strong>te DEBUG (pero t<strong>en</strong>ga cuidado de<br />

no usar NDEBUG, que está reservado <strong>en</strong> C). La secu<strong>en</strong>cia de s<strong>en</strong>t<strong>en</strong>cias podrías ser:<br />

#define DEBUG // Probably in a header file<br />

//...<br />

#ifdef DEBUG // Check to see if flag is defined<br />

/* debugging code here */<br />

#<strong>en</strong>dif // DEBUG<br />

La mayoría de las implem<strong>en</strong>taciones de C y <strong>C++</strong> también le permitirán definir<br />

y eliminar banderas (con #define y #undef) desde línea de comandos, y de ese<br />

modo puede recompilar código e insertar información de depuración con un único<br />

comando (preferiblem<strong>en</strong>te con un makefile, una herrami<strong>en</strong>ta que será descrita <strong>en</strong><br />

breve). Compruebe la docum<strong>en</strong>tación de su <strong>en</strong>torno si necesita más detalles.<br />

Banderas para depuración <strong>en</strong> tiempo de ejecución<br />

En algunas situaciones es más conv<strong>en</strong>i<strong>en</strong>te activar y desactivar las banderas de<br />

depuración durante la ejecución del programa, especialm<strong>en</strong>te cuando el programa<br />

se ejecuta usando la línea de comandos. Con programas grandes resulta pesado re-<br />

124<br />

✐<br />

✐<br />

✐<br />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!