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





  • 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, "!";
    }
    

Anmelden zum Antworten