To debug better a Wii application / game i have created a trace C++ module with is logging trace event to file. Please checkout the following code. I hope it benefit someone!
trace.h
#ifndef TRACE_H #define TRACE_H class Trace { private: FILE * fp; char * getDate(); public: // Constructor & Destructor Trace(); ~Trace(); // Methodes int open(const char *filename); int event( const char *functionName, int threadNr, const char *event, ...); int eventRaw( char character); int close(); }; #endif
trace.cpp
#include <stdio.h> #include <gccore.h> #include <ogcsys.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <ogcsys.h> #include <stdarg.h> #include <time.h> #include "trace.h" // Enable / Disable trace file functionality bool traceOn = false; // ------------------------------ // Constructor // ------------------------------ Trace::Trace() { fp=NULL; } // ------------------------------ // Destructor // ------------------------------ Trace::~Trace() { close(); } // ------------------------------ // Methods // ------------------------------ // Open trace file int Trace::open(const char *filename) { int returnValue=0; if (!traceOn) return -1; if((fp=fopen(filename, "wb"))==NULL) { printf("Error: Cannot open trace file.\n"); returnValue=-2; } return returnValue; } // Close trace file int Trace::close() { int returnValue=0; if (fp!=NULL) { fclose(fp); } return returnValue; } // Create trace timestamp char * Trace::getDate() { struct tm *now = NULL; time_t time_value = 0; static char buf[ 128 ] ; // Clear memory memset(buf, sizeof(buf), 0x00); /* Get time value */ time_value = time(NULL); /* Get time and date structure */ now = localtime(&time_value); // Create time stamp sprintf(buf,"%02d-%02d-%04d %02d:%02d:%02d", now->tm_mday, now->tm_mon+1, now->tm_year+1900, now->tm_hour,now->tm_min,now->tm_sec); return buf; } // Save trace event in trace file int Trace::event( const char *functionName, int threadNr, const char *event, ...) { int returnValue=0; char buf[ MAX_LEN ]; // Clear memory memset(buf, MAX_LEN, 0x00); if (!traceOn) return -1; // Expend event string va_list list; va_start(list, event ); vsprintf(buf, event, list); if (fp!=NULL) { // Save string to file fprintf(fp,"%s [thread%d-%s] %s\n",getDate(), threadNr, functionName, buf); fflush(fp); } return returnValue; } // Save trace event in trace file int Trace::eventRaw( char character) { int returnValue=0; if (!traceOn) return -1; if (fp!=NULL) { // Save string to file fprintf(fp,"%c",character); fflush(fp); } return returnValue; }