You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdevelop/parts/valgrind/valgrinditem.cpp

72 lines
1.9 KiB

#include "valgrinditem.h"
#include <tqregexp.h>
#include <tqstringlist.h>
#include <kdebug.h>
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()
{
}