
Es muy útil hacer debugging con std::cerr, y si usas:
#include <iostream>
using namespace std;
main(blabla...){
cerr << "This is a debug message" << endl;
}
Todo funciona maravillosamente, hasta que tus 20 threads comienzan a vomitar cientos y cientos de mensajes que hacen imposible leer el debug. Para ello lo ideal sería definir “debug levels”. Hay dos formas la forma simple y tonta:
#ifdef DEBUG_N
cerr << "This is a debug message" << endl;
#endif
Pero esa forma es muy fastidiosa, así que mejor definimos un ‘cerdo‘ (cerdo = cerr debug output). O incluso mejor un cerdo con niveles: cerdo, cerdo2, cerdo3,… , cerdoN. He aqui uno para 3 niveles (donde hacemos que cerdo=cerdo1):
// ----- cerdo.h -----
#ifndef DEBUG
#define cerdo if(0) cerr
#define cerdo1 if(0) cerr
#define cerdo2 if(0) cerr
#define cerdo3 if(0) cerr
endif
#if (DEBUG==1)
#define cerdo cerr
#define cerdo1 cerr
#define cerdo2 if(0) cerr
#define cerdo3 if(0) cerr
#endif
#if (DEBUG==2)
#define cerdo cerr
#define cerdo1 cerr
#define cerdo2 cerr
#define cerdo3 if(0) cerr
#endif
#if (DEBUG==3)
#define cerdo cerr
#define cerdo1 cerr
#define cerdo2 cerr
#define cerdo3 cerr
#endif
// ---- end cerdo.h ----
Ahora solo queda usar los cerdos.
#define DEBUG 2
#include "cerdo.h"
using namespace std;
main(blabla...){
cerdo << "This is a debuglevel 1 message" << endl;
cerdo1 << "This is a debuglevel 1 message" << endl;
cerdo2 << "This is a debuglevel 2 message" << endl;
cerdo3 << "This is a debuglevel 3 message" << endl;
}
Bye. Continue reading ‘Debugging con el ‘cerdo’ y con std::cerr’
Esa es la tarea de estos dias. Programar en Linux y encontrar una IDE decente, pero de verdad decente. Ya le di una oportunidad a Code::Blocks y lo veo muy inmaduro aun, al probar Anjuta de plano solo aguante unos pocos minutos y lo deseché. Estoy con Netbeans y aunque se hizo para Java, es trivial (estilo addon de Firefox 3) instalar el pluging de C++. Hasta ahora Netbeans me ha gustado mas que CodeBlocks.
¿Que busco?
- Resalte de sintaxis C++ (incluyendo todo el arbol de includes)
- Debug & Release profiles
- Comodo de usar
- Estable
- Facilmente configurable y flexible
- …y si se puede, que sea bonito
Creo que mi top 3 quedará asi:
- Netbeans
- Code::Blocks
- Eclipse (aun por definir)
Hoy parece un día malo, primero el Visual Studio y ahora esto:
Debugger detected! Please close it down and restart!
Windows NT user: Please note that having the WinICE/SoftICE services installed means that you are running a debugger!

Algunos dicen que hay que eliminar el Nero, pero yo no tengo Nero. El responsable sin embargo parece ser la compañia detrás de Nero. Este diálogo proviene de NeVideo.ax. Es un filtro de DirectShow. Te toparás con este error si estas haciendo procesamiento de video, usando librerias de DirectShow, OpenCV o algo similar.
Solución
Elimina ese archivo NeVideo.ax. En mi caso lo encontré en
C:\Archivos de programa\Archivos comunes\Ahead\DSFilter\NeVideo.ax
Si no tienes ese archivo tal vez sea uno nuevo de Nero o de alguna otra inteligente compañia que le gusta atormentar a los desarrolladores. La solucion en ese caso es darle “Aceptar” al diálogo y buscar entre los Resultados (Output) de Visual Studio algun mensaje que tenga que ver con archivos .ax raros.
Ok, estabas trabajando felizmente en tu nueva aplicación, que por cierto usa Visual Basic 2005 (VB.NET) para cargar una DLL de C++. Entonces decides formatear tu PC, o bien cambiarte a trabajar a otra PC. Y resulta que tu programa se la pasa maldiciéndote con:
ERROR:System.DllNotFoundException: Unable to load DLL ‘cualquier.dll’:
No se pudo iniciar la aplicación porque su configuración es incorrecta.
Reinstalar la aplicación puede solucionar el problema.
¿Que hiciste?
Te aseguraste de que los PATH esten correctos, de que las DLL fueran encontradas, incluso le pediste ayuda a Filemon y te dice que no puede encontrar algo relacionado a MSVCRT80.DLL y otras bazofias.
Fuiste un desesperado y hasta llegaste a ser capaz incluso de arrojar todas las DLL’s en el mismo directorio de la aplicación pero a pesar que eso soluciona este problema la mayoria de la veces, esta vez nada parece funcionar.
La solución
Instala el “Microsoft Visual C++ 2005 Redistributable Package“, tal vez necesites la version SP1 o la version anterior.
Se supone que Visual Studio debió haberlo instalado, pero si eres de los trompetes que les gusta usarlo en español a esto es a lo que te expones. Ya ves aprende inglés.
Ahh y mas te vale que lo metas junto con tu aplicación o los dolores de cabeza los vas a trasladar a los usuarios.
El Problema
Un dia de repente tu Visual Studio al entrar te dice:
Package Load Failure
Package ‘Visual Studio XML Editor Package’ has failed to load properly ( GUID = {87569308-4813-40A0-9CD0-D7A30838CA3F} ). Please contact package vendor for assistance. Application restart is recommended, due to possible environment corruption. Would you like to disable loading this package in the future? You may use ‘devenv /resetskippkgs’ to re-enable package loading.
(Perooo que!!???)
Luego de eso se niega a abrirl proyectos de Visual Basic y cualquier cosa que tenga que ver directa o indirectamente con XML.
¿Que hiciste?:
Intentaste lo siguiente:
- Meter el DVD/CD de Visual Studio, reinstalar. De nada sirve.
- Meter el DVD/CD De Sisual Studio, reparar pero se queda pidiendote un tal netfx2.msi que por ningun lado existe.
- Desinstalar el Net FrameWork 1.1 y reinstalar Visual Studio. De nada sirve.
- Intentar reinstalar Net Framework 2.0 y reinstar Visual Studio. De nada sirve.
La Solución:
Usa el dotnetfx_cleanup_tool para limpiar la maquina de todos los Net Frameworks que tengas. Luego reinstala la version 2.0, reinicia y asunto arreglado. No necesitas reinstalar Visual Studio.
El problema es que el Framework 1.1 y el 2.0 no se llevan bien juntos, a veces el 1.1 gana y sobreescribe el 2.0 con cosas viejas. Por eso el Visual Studio no encuentra el paquete editor de XML.
Por otro lado, la razon por la cual te pide ese susodicho netfx2.msi que no existe es porque usaste una version de windows como la Windows Unattended o cosas asi que empaquetan el .Net y todos los parches de jalón.
Esto no esta aquí por que porque necesito tenerlo en algun lugar donde no se me olvide. Adios.