Debug-Strings
-
Hallo zusammen,
wollte mal fragen ob es im C++ Builder die Möglichkeit gibt, Debug-Strings auszugeben und wenn ja wie das geht?
Hab das bisher immer über MessageBoxen gemacht, ist aber nicht sehr sauber find ich.
Vielen Dank im Voraus.
Grüße
Arno
-
OutputDebugString.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-139050-and-highlight-is-outputdebugstring.html
(letzter Post)
-
Vielen Dank _matze.
Kann man den so auch variablen ausgeben, oder geht das nur über die 'WatchList'?
Gruß
Arno
-
Du übergibst an die Funktion einen String, den du aufbauen kannst, wie du willst. Also kannst du natürlich auch vorher einen passenden String zusammenbasteln, in dem eine oder mehrere Variablen "verbaut" sind.
-
Super, danke.
-
Bei Borland vermisse ich das TRACE Makro vom Visual Studio, daher habe ich was eigenes zusammengeschraubt. Vielleicht hilft dir das ja weiter
Trace Header Datei:
#ifndef DebugUtilH #define DebugUtilH #include <System.hpp> #include <string> #include <sstream> #include <iostream> #ifdef _DEBUG #define TRACE VCLTrace(__FILE__, __LINE__), #else #define TRACE (void)0, #endif std::ostream& operator<<( std::ostream& stream, const AnsiString& op ); struct TraceItem { template<typename T> TraceItem( const T& op ) { StringStream << op; } std::ostringstream StringStream; }; class VCLTrace { std::ostringstream StringStream; public: VCLTrace( const char* pszFile, unsigned int uiLine ); ~VCLTrace(); VCLTrace& operator,( const TraceItem& op ); }; #endif
Trace Implementationsdatei:
#include <windows.h> #include <System.hpp> #include <iomanip> #include "debug_util.h" using namespace std; VCLTrace::VCLTrace( const char* pszFile, unsigned int uiLine ) { SYSTEMTIME SysTime; GetSystemTime( &SysTime ); StringStream << pszFile << " (" << uiLine << ") " << "[" << setw(2) << setfill( '0' ) << SysTime.wDay << "." << setw(2) << setfill( '0' ) << SysTime.wMonth << "." << SysTime.wYear << " " << setw(2) << setfill( '0' ) << SysTime.wHour << ":" << setw(2) << setfill( '0' ) << SysTime.wMinute << ":" << setw(2) << setfill( '0' ) << SysTime.wSecond << "." << setw(3) << setfill( '0' ) << SysTime.wMilliseconds << "] "; } VCLTrace::~VCLTrace() { OutputDebugString( StringStream.str().c_str() ); } VCLTrace& VCLTrace::operator,( const TraceItem& op ) { StringStream << op.StringStream.str(); return *this; } ostream& operator<<( ostream& stream, const AnsiString& op ) { stream << op.c_str(); return stream; }
Die Benutzung sieht folgendermassen aus:
#include "debug_util.h" int main() { int x = 5; AnsiString s = "x ist"; TRACE "Hello World: ", s, x, "!"; }