Detectando fugas de memoria: Visual Leak Detector

Ésta librería me la encontré por casualidad un día navegando por Internet, y curiosamente unos meses más tarde tuve que recurrir a ella. Si has desarrollado programas para Linux usando C o C++, seguramente tarde o temprano habrás recurrido a usar Valgrind, el entorno que emula una arquitectura x86 y detecta todos los usos indebidos de la memoria.

Pues bien, Visual Leak Detector es una librería que, al incluirla en nuestro proyecto, nos muestra toda la información (por medio de la consola de Visual Studio o, si lo deseamos, con salida a un fichero de texto) sobre la memoria no liberada (memory leaks) con una precisión pasmosa. Y ahora, un ejemplo de su uso:

  1. Descargamos el instalador.
  2. Lo ejecutamos y procedemos a instalarlo en el lugar que más adecuado nos parezca. Muy seguramente, durante el proceso de instalación nos preguntará si deseamos añadir la ruta a la librería “vld.dll” al path automáticamente. Aceptamos y continuamos.image
  3. Ya esta listo para usar. Si queremos, en la última pantalla podemos visualizar la documentación.image
  4. Ahora hay dos opciones para que Visual C++ reconozca el archivo de cabecera y la librería; la primera consiste en ir a la carpeta donde hemos instalado Visual Leak Detector y copiar los directorios “include” y “lib” a la carpeta “VC” existente dentro de nuestra instalación de Visual Studio. Sin embargo, este método puede considerarse poco más que una chapuza, así que vamos a hacer las cosas bien y lo vamos a configurar desde dentro de nuestro proyecto.
  5. Ejecutamos el Visual Studio y creamos una nueva aplicación de consola de Visual C++. En el diálogo del asistente seleccionamos la sección “Application Settings” y activamos la casilla “Empty project”. No queremos que Visual C++ nos añada archivos que puedan dar lugar a confusión (como las cabeceras precompiladas).image

    image

  6. Ahora es el turno de configurar las nuevas rutas de inclusión del proyecto. Nos vamos al menú “Project” y seleccionamos la última opción, “<Nombredeproyecto> Properties…”. Navegamos el árbol de opciones seleccionando “Configuration Properties / C/C++ / General” y pinchamos en el campo “Additional Include Directories” de la lista de opciones de la derecha. Veremos que aparece un botón con unos puntos suspensivos que nos abrirá una nueva ventanita, en la que pulsando el botón con el icono de una carpeta nos permitirá especificar un nuevo directorio para añadir a la lista. Añadimos el subdirectorio “include” dentro de nuestra instalación de Visual Leak Detector y pinchamos en “OK”.image

    image

  7. Ahora en el árbol de opciones de la izquierda nos desplazaremos hasta “Configuration Properties / Linker / General”. Aquí, con el campo “Additional Library Directories” tenemos que hacer exactamente lo mismo que en el punto anterior, solo que en lugar de agregar el directorio “include”, ésta vez seleccionaremos “lib”.image
  8. Por último, vamos a “Configuration Properties / Linker / Input” y en “Additional Dependencies” escribimos “vld.lib”. De ésta manera le decimos al enlazador que si encuentra algún símbolo desconocido, busque información en dicha librería para resolver las dependencias.image
  9. Ahora ya solo queda comprobar el funcionamiento de la librería. Vamos a añadir un nuevo fichero de código fuente a la carpeta “Source Files” de nuestro proyecto, llamado “main.cpp”, y vamos a teclear el siguiente código:image
  10. Y procedemos a compilarlo y ejecutarlo. Aparecerá la ventana de consola con la ejecución de nuestro programa y podremos finalizarla. Aparentemente todo funciona bien, pero si vamos a “View / Output”, habilitaremos la ventana en la que podremos ver la salida del Visual Leak Detector. Aquí nos informa que se ha producido un memory leak, concretamente de 100 bytes, y el inicio del problema está en la línea 8 de “main.cpp”.image
  11. Podemos comprobar que en dicha línea hemos realizado una reserva de memoria con el operador new, pero luego no la hemos liberado. Vamos a subsanar el error y a comprobar qué ocurre esta vez tras la ejecución:image

En efecto, Visual Leak Detector notifica que no hay ninguna fuga de memoria y que todo ha funcionado correctamente. Ahora es el turno de emplearlo en vuestras propias aplicaciones 😉

Bentou (弁当)

El bentou es el nombre que se le da en Japón al almuerzo (generalmente formado por arroz, pescado y verduras) preparado y envasado para tomar fuera de casa. Aunque éstos almuerzos suelen estar a la venta por un precio razonable, el punto fuerte es elaborarlo (con mucha dedicación, eso sí) en casa y así comer lo que más que te apetezca.

Bien, pues debido a que ya estaba un poco harto de comer siempre lo mismo en los mismos sitios, decidí comprarme una caja de bentou por eBay para prepararme yo la comida los días que me fuese más tarde a clase.

bento

Consiste en dos bandejas (con una capacidad total de 860 ml) con un compartimento que sirve de tapa y portapalillos y otra tapa superior con los cierres; fabricado en plástico ABS y con válvulas para poder meterlo en el microondas. Además, también trae una bolsa negra para envolverlo y que pierda menos calor.

Así que el miércoles me decidí a estrenarlo y me levanté temprano para preparar algo que llevaba un tiempo queriendo cocinar:

01042009237

Arroz “2 delicias” (arroz y surimi, no me dio tiempo a incluir tortilla) y, aunque no es un plato japonés pero sí oriental, ternera con bambú y setas. El veredicto final: al principio parece pequeño, pero si llenas bien el bentou acabas más que harto de comer 😀

PD: por si a alguien le pica la curiosidad, podéis encontrar al vendedor de eBay aquí, y la receta de la ternera aquí.

Viejas joyas…

Yendo de camino al Carrefour del centro comercial de al lado de la Universidad, hemos pasado por delante de Juguetilandia y tras ver en el escaparate un cartel en el que anunciaban la liquidación de juegos antiguos (GameCube, PlayStation 2, XBox y Game Boy Advance), hemos decidido pasar a ver con qué nos encontrábamos.

Casi todo el stock eran los típicos juegos malillos que nadie quiere, pero me he llevado una sorpresa al encontrarme con algunas copias sueltas de Final Fantasy IV Advance, Sword of Mana y Tales of Phantasia, a 6€ cada uno (10€ si te llevabas dos).

Y aquí las tengo, aunque ahora me da pena desprecintar los cartuchos, con lo bonitos que son con el plástico aún puesto:

rpgs

Mañana volveré a ver qué queda de PlayStation 2, porque de XBox he mirado por encima y el único juego que se salvaba era el Tomb Raider Legend.