Compiling KMess for Windows: kmess-windows-debug-hack.patch

File kmess-windows-debug-hack.patch, 3.6 kB (added by diederik, 3 months ago)

Hack to write debugging output to C:\kmessdebug.log (workarround for disabled kDebug() on Windows release builds)

  • src/kmessdebug.cpp

     
    2222#include <unistd.h> 
    2323 
    2424#include <QTime> 
     25#include <QtCore> 
    2526 
     27#ifdef Q_OS_WIN 
     28  #include <QFile> 
     29  #define EOL "\r\n" 
     30#else 
     31  #define EOL "\n" 
     32#endif 
    2633 
     34 
    2735// kmessdebug.h adds a KMESS_NULL macro to detect 
    2836// and display null pointer warnings. This is used 
    2937// in a " if(KMESS_NULL(var)) return; " statement 
     
    167175  bool isAssert = ( strncmp( message, "ASSERT", 7 ) == 0 ); // 'ASSERT failure' or 'ASSERT: ' 
    168176  static QTime timer; 
    169177  if( ! timer.isValid() ) 
     178  { 
    170179    timer.start(); 
     180  } 
     181 
    171182  float elapsed = (float)timer.elapsed() / (float)1000; 
    172183 
     184 
     185// Quick hack to get debug output on Windows. 
     186#ifdef Q_OS_WIN 
     187  static QFile debugFile; 
     188  QString debugLine; 
     189 
     190  if( ! debugFile.isOpen() ) 
     191  { 
     192    debugFile.setFileName("C:\\kmessdebug.log"); 
     193    if( ! debugFile.open( QFile::WriteOnly ) ) 
     194    { 
     195      fprintf( stderr, "%.3f> WARNING: %s" EOL, elapsed, "unable to open debug file: C:\\kmessdebug.log" ); 
     196      abort(); 
     197    } 
     198  } 
     199 
     200  if( ! debugFile.isOpen() ) 
     201  { 
     202    return; 
     203  } 
     204 
    173205  if( isAssert ) 
    174206  { 
     207    debugLine.sprintf( "%.3f> kmess(%d) %s" EOL, elapsed, getpid(), message ); 
     208    debugFile.write( debugLine.toUtf8() ); 
     209    debugFile.flush(); 
     210 
     211#ifdef KMESSTEST 
     212    if( type == QtFatalMsg ) 
     213    { 
     214      abort(); 
     215    } 
     216#endif 
     217 
     218  } 
     219  else 
     220  { 
     221    switch( type ) 
     222    { 
     223      case QtDebugMsg: 
     224        debugLine.sprintf( "%.3f> %s" EOL, elapsed, message ); 
     225        break; 
     226 
     227      case QtWarningMsg: 
     228        debugLine.sprintf( "%.3f> WARNING: %s" EOL, elapsed, message ); 
     229        break; 
     230 
     231      case QtCriticalMsg: 
     232        debugLine.sprintf( "%.3f> CRITICAL: %s" EOL, elapsed, message ); 
     233        break; 
     234 
     235      case QtFatalMsg: 
     236        debugLine.sprintf( "%.3f> FATAL: %s" EOL, elapsed, message ); 
     237    } 
     238 
     239    debugFile.write( debugLine.toUtf8() ); 
     240    debugFile.flush(); 
     241  } 
     242#endif 
     243 
     244 
     245  if( isAssert ) 
     246  { 
    175247    // can be qWarning() by us or qFatal() from Qt. 
    176     fprintf( stderr, "%.3f> kmess(%d) %s\n", elapsed, getpid(), message ); 
     248    fprintf( stderr, "%.3f> kmess(%d) %s" EOL, elapsed, getpid(), message ); 
    177249 
    178250#ifdef KMESSTEST 
    179251    // Crash on qFatal() from Qt, called from Q_ASSERT() 
     
    189261    switch( type ) 
    190262    { 
    191263      case QtDebugMsg: 
    192         fprintf( stderr, "%.3f> %s\n", elapsed, message ); 
     264        fprintf( stderr, "%.3f> %s" EOL, elapsed, message ); 
    193265        break; 
    194266 
    195267      case QtWarningMsg: 
    196         fprintf( stderr, "%.3f> WARNING: %s\n", elapsed, message ); 
     268        fprintf( stderr, "%.3f> WARNING: %s" EOL, elapsed, message ); 
    197269        break; 
    198270 
    199271      case QtCriticalMsg: 
    200         fprintf( stderr, "%.3f> CRITICAL: %s\n", elapsed, message ); 
     272        fprintf( stderr, "%.3f> CRITICAL: %s" EOL, elapsed, message ); 
    201273        break; 
    202274 
    203275      case QtFatalMsg: 
    204         fprintf( stderr, "%.3f> FATAL: %s\n", elapsed, message ); 
     276        fprintf( stderr, "%.3f> FATAL: %s" EOL, elapsed, message ); 
    205277 
    206278#ifdef KMESSTEST 
    207279        abort(); 
  • src/kmessdebug.h

     
    2424// reason to include this file by default so no one else has to. 
    2525#include <KDebug> 
    2626 
     27#ifdef Q_OS_WIN 
     28  #include <QDebug> 
    2729 
     30  #undef kDebug 
     31  #undef kWarning 
     32  #define kDebug ( QDebug(QtDebugMsg) << Q_FUNC_INFO ).space 
     33  #define kWarning ( QDebug(QtWarningMsg) << Q_FUNC_INFO ).space 
     34#endif 
     35 
    2836#if ( KMESS_DEBUG == 1) 
    2937  #define KMESSTEST 
    3038  #define KMESS_NETWORK_WINDOW