domingo, outubro 08, 2006

Macros de Debug

Aí vai um pequeno código pra ajudar no debug dos seus programas. O código foi originalmente postado na Allegro wiki por James Lawder Andrews. O que eu fiz foi dar uma editada no código e inserir comentários em português pra que todo mundo entenda.

Espero que seja útil. Comentem.

/* ======= debug.h =======
Conjunto de macros que permitem escrever informações de debug em um arquivo se DEBUG estiver definido */


#ifndef _DEBUG_H_
#define _DEBUG_H_

/* Caso a macro DEBUG esteja definida, será definida a macro DEBUGOUT que permite gravar no arquivo informações de debug. Caso contrário, será definida uma macro vazia que não irá entrar no código no processo de compilação. */
#define DEBUG

#ifdef DEBUG
#include <fstream>

/* Esta macro é usada para gravar no arquivo de debug.
'message' pode ser uma string (entre aspas) ou uma variável.
As macros __FILE__ e __LINE__ são pré-definidas pelo compilador e representam, respectivamente, o nome do arquivo e a linha. */
#define DEBUGOUT(message) debug << "(" << __FILE__ << ":" << __LINE__ << ") " << message << std::endl << std::flush;
#else
/* Se chegar até aqui, significa que DEBUG não foi definida, portanto define-se uma macro vazia DEBUGOUT que não faz nada. */
#define DEBUGOUT(message)
#endif


#ifdef DEBUG
/* Aqui é indicado para o compilador que o objeto debug vai ser declarado em outro arquivo.*/
extern std::ofstream debug;
#endif

#endif


/* ======= teste.cpp =======
Aqui testamos nossa macro pra ver se ela realmente funciona. */

#include <iostream>
#include <debug.h>


using namespace std;

int main(){
#ifdef DEBUG
/* Se DEBUG estiver definido, precisamos declarar o objeto debug que foi declarado através de um extern no arquivo debug.h.
O argumento neste caso é o nome do arquivo que queremos gravar.
Este é o único teste que deve ser feito de maneira explícita. Todas as outras chamadas relativas ao DEBUG só serão incluídas na compilação se a macro estiver definida. Caso se deseje compilar sem o debug, pode-se comentar a linha #define DEBUG (em debug.h). */
ofstream debug("debug.txt");
#endif
int x = 10;

DEBUGOUT("ERRO"); // Gravando uma string no arquivo
DEBUGOUT(x); // Gravando o conteúdo de uma variável no arquivo.
}

Um comentário:

Drica!!! disse...

Olha!! Seu Pacman ta muito legal!! Super bem feito !!
Bjs !!