#include "valgrinditem.h" #include #include #include ValgrindBacktraceItem::ValgrindBacktraceItem( const TQString& rawOutput ): _rawOutput( rawOutput ), _highlight( false ) { TQRegExp re1( "^==(\\d+)==\\s+(by|at) (0x[\\dABCDEF]+): (.*) \\((.*):(\\d+)\\)$" ); TQRegExp re2( "^==(\\d+)==\\s+(by|at) (0x[\\dABCDEF]+): (.*) \\(in (.*)\\)$" ); TQRegExp valRe( "==(\\d+)== (.*)" ); if ( valRe.search( _rawOutput ) >= 0 ) _message = valRe.cap( 2 ); if ( re1.search( _rawOutput ) >= 0 ) { _type = SourceCode; _pid = re1.cap( 1 ).toInt(); _address = re1.cap( 3 ); _function = re1.cap( 4 ); _url = re1.cap( 5 ); _line = re1.cap( 6 ).toInt(); } else if ( re2.search( _rawOutput ) >= 0 ) { _type = Library; _pid = re2.cap( 1 ).toInt(); _address = re2.cap( 3 ); _function = re2.cap( 4 ); _url = re2.cap( 5 ); _line = -1; } else { _type = Unknown; _line = -1; _pid = -1; } } ValgrindBacktraceItem::~ValgrindBacktraceItem() { } ValgrindItem::ValgrindItem( const TQString& message ): _pid(-1) { TQRegExp valRe( "==(\\d+)== (.*)" ); TQStringList lines = TQStringList::split( "\n", message ); TQString curMsg; for ( TQStringList::ConstIterator it = lines.begin(); it != lines.end(); ++it ) { if ( valRe.search( *it ) < 0 ) { kdDebug() << "ValgrindItem: got unrecognizable line '" << *it << "'" << endl; continue; // not of interest } if ( _pid == -1 ) _pid = valRe.cap( 1 ).toInt(); curMsg = valRe.cap( 2 ); if ( curMsg.startsWith( " " ) ) { _backtrace.append( ValgrindBacktraceItem( *it ) ); } else { if ( !_message.isEmpty() ) _message += "\n"; _message += curMsg; } } // static int i = 0; // kdDebug() << "got: " << ++i << ": " << _message << endl << message << endl; } ValgrindItem::~ValgrindItem() { }