Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐