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.
72 lines
1.8 KiB
72 lines
1.8 KiB
#include "valgrinditem.h"
|
|
|
|
#include <qregexp.h>
|
|
#include <qstringlist.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
ValgrindBacktraceItem::ValgrindBacktraceItem( const QString& rawOutput ): _rawOutput( rawOutput ), _highlight( false )
|
|
{
|
|
QRegExp re1( "^==(\\d+)==\\s+(by|at) (0x[\\dABCDEF]+): (.*) \\((.*):(\\d+)\\)$" );
|
|
QRegExp re2( "^==(\\d+)==\\s+(by|at) (0x[\\dABCDEF]+): (.*) \\(in (.*)\\)$" );
|
|
QRegExp 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 QString& message ): _pid(-1)
|
|
{
|
|
QRegExp valRe( "==(\\d+)== (.*)" );
|
|
QStringList lines = QStringList::split( "\n", message );
|
|
QString curMsg;
|
|
|
|
for ( QStringList::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()
|
|
{
|
|
}
|