Ich schreibe gerade an einigen DLLs für Gamestudio und hatte da das Problem, dass es nicht einfach ist diese zu Debuggen. Dafür habe ich hier eine einfache Logging-Klasse geschrieben die als Singleton agiert, er muss also nicht explizit initialisiert sondern einfach nur aufgerufen werden. Das geht so:
Logger::getInstance()->log("Skins: %i", 1); |
Es ist also möglich, beliebig lange Argumentelisten zu verarbeiten. Das Log wird in der Datei “Log.txt” im Verzeichnis der Anwendung gespeichert.
Den Quelltext findet ihr hinter dem More-Tag. Viel Spaß damit!
Logger.cpp
#include "Logger.h" #include <stdarg.h> Logger *Logger::theInstance = NULL; Logger::Logger() { logFile = fopen("Log.txt", "wt"); } Logger::~Logger() { if (logFile) { fflush(logFile); fclose(logFile); logFile = NULL; } } Logger* Logger::getInstance() { if (theInstance == NULL) { theInstance = new Logger(); } return theInstance; } void Logger::release() { if (theInstance != NULL) { delete theInstance; } theInstance = NULL; } bool Logger::log(char* _log, ...) { char acText[1024]; va_list VAList; va_start(VAList, _log); vsprintf(acText, _log, VAList); va_end(VAList); fprintf(Logger::logFile, "%s (Line %d): %s \n", __FILE__, __LINE__, acText); return true; } |
Logger.h
#pragma once #include <cstdio> class Logger { private: Logger(); ~Logger(); FILE* logFile; static Logger *theInstance; public: static Logger *getInstance(); static void release(); bool log(char* _log, ...); }; |