summaryrefslogtreecommitdiffstats
path: root/parts/valgrind/valgrinditem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'parts/valgrind/valgrinditem.cpp')
-rw-r--r--parts/valgrind/valgrinditem.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/parts/valgrind/valgrinditem.cpp b/parts/valgrind/valgrinditem.cpp
new file mode 100644
index 00000000..318254d3
--- /dev/null
+++ b/parts/valgrind/valgrinditem.cpp
@@ -0,0 +1,71 @@
+#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()
+{
+}