Update drkonqi to collect data on threaded programs and CPU type/speed/core number

pull/2/head
Timothy Pearson 11 years ago
parent 24e3f6f2fa
commit 1fbdb78d93

@ -34,6 +34,7 @@
#include <tdemessagebox.h> #include <tdemessagebox.h>
#include <tdelocale.h> #include <tdelocale.h>
#include <tdetempfile.h> #include <tdetempfile.h>
#include <tdehardwaredevices.h>
#include "krashconf.h" #include "krashconf.h"
#include "backtrace.h" #include "backtrace.h"
@ -201,20 +202,61 @@ bool BackTrace::usefulBacktrace()
// remove stack frames added because of TDECrash // remove stack frames added because of TDECrash
void BackTrace::processBacktrace() void BackTrace::processBacktrace()
{ {
if( !m_krashconf->kcrashRegExp().isEmpty()) if( !m_krashconf->kcrashRegExp().isEmpty()) {
{ TQRegExp kcrashregexp( m_krashconf->kcrashRegExp());
TQRegExp kcrashregexp( m_krashconf->kcrashRegExp()); int pos = -1;
int pos = kcrashregexp.search( m_strBt ); while ((pos = kcrashregexp.search( m_strBt )) >= 0) {
if( pos >= 0 ) pos = kcrashregexp.search( m_strBt );
{ if( pos >= 0 ) {
int len = kcrashregexp.matchedLength(); int len = kcrashregexp.matchedLength();
if( m_strBt[ pos ] == '\n' ) int nextinfochunkpos = m_strBt.find("====", pos);
{ if (nextinfochunkpos >= 0) {
++pos; // Trying to delete too much!
--len; int chunkpos = pos;
} TQString limitedstrBt = m_strBt.mid(pos, nextinfochunkpos - pos);
m_strBt.remove( pos, len ); pos = kcrashregexp.search( limitedstrBt ) + chunkpos;
m_strBt.insert( pos, TQString::fromLatin1( "[TDECrash handler]\n" )); len = kcrashregexp.matchedLength();
} }
} if (pos >= 0) {
if( m_strBt[ pos ] == '\n' ) {
++pos;
--len;
}
m_strBt.remove( pos, len );
m_strBt.insert( pos, TQString::fromLatin1( "[TDECrash handler]\n" ));
}
}
}
}
if( !m_krashconf->kcrashRegExpSingle().isEmpty()) {
TQRegExp kcrashregexp( m_krashconf->kcrashRegExpSingle());
int pos = kcrashregexp.search( m_strBt );
if( pos >= 0 ) {
int len = kcrashregexp.matchedLength();
if( m_strBt[ pos ] == '\n' ) {
++pos;
--len;
}
m_strBt.remove( pos, len );
}
}
// Append potentially important hardware information
m_strBt.append("\n\n==== (tdehwlib) hardware information ====\n");
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
TDEGenericHardwareList hwlist = hwdevices->listAllPhysicalDevices();
TDEGenericDevice *hwdevice;
for ( hwdevice = hwlist.first(); hwdevice; hwdevice = hwlist.next() ) {
if (hwdevice->type() == TDEGenericDeviceType::CPU) {
TDECPUDevice* cpudevice = static_cast<TDECPUDevice*>(hwdevice);
m_strBt.append(TQString("CPU core number:\t\t%1\n").arg(cpudevice->coreNumber()));
m_strBt.append(TQString("\tVendor:\t\t\t%1\n").arg(cpudevice->vendorName()));
m_strBt.append(TQString("\tModel:\t\t\t%1\n").arg(cpudevice->vendorModel()));
m_strBt.append(TQString("\tName:\t\t\t%1\n").arg(cpudevice->name()));
m_strBt.append(TQString("\tCurrent Frequency:\t%1 MHz\n").arg(cpudevice->frequency()));
m_strBt.append(TQString("\tMinimum Frequency:\t%1 MHz\n").arg(cpudevice->minFrequency()));
m_strBt.append(TQString("\tMaximum Frequency:\t%1 MHz\n").arg(cpudevice->maxFrequency()));
m_strBt.append("\n");
}
}
} }

@ -158,9 +158,10 @@ Comment[zu]=Umcoshi wamaphutha osekelwe umbhalo osuka kwi-GNU kwikhonsoli
Exec=konsole -e gdb -nw %execname %pid Exec=konsole -e gdb -nw %execname %pid
ExecBatch=gdb -nw -n -batch -x %tempfile %execname %pid ExecBatch=gdb -nw -n -batch -x %tempfile %execname %pid
TryExec=gdb TryExec=gdb
BacktraceCommand=bt BacktraceCommand=echo \\n\necho ==== (gdb) bt ====\\n\nbt\necho \\n\\n\necho ==== (gdb) bt full ====\\n\nbt full\necho\\n\\n\necho ==== (gdb) thread apply all bt ====\\n\nthread apply all bt
RemoveFromBacktraceRegExp=\(no debugging symbols found\)\.\.\.\\n? RemoveFromBacktraceRegExp=\(no debugging symbols found\)\.\.\.\\n?
InvalidStackFrameRegExp=\\n#[0-9]+\\s+0x[0-9A-Fa-f]+ \w* \?\? InvalidStackFrameRegExp=\\n#[0-9]+\\s+0x[0-9A-Fa-f]+ \w* \?\?
FrameRegExp=\\n#[0-9]+\\s+0x[0-9A-Fa-f]+ FrameRegExp=\\n#[0-9]+\\s+0x[0-9A-Fa-f]+
NeededInValidBacktraceRegExp=\\n#5 NeededInValidBacktraceRegExp=\\n#5
TDECrashRegExp=\\n0x[0123456789abcdefABCDEF]+.*<signal handler called>[ ]*\\n TDECrashRegExp=\\n#0[ ]*0x[0123456789abcdefABCDEF]+.*<signal handler called>[ ]*\\n
TDECrashRegExpSingle=\\n0x[0123456789abcdefABCDEF][^\\n]*\\n

@ -111,6 +111,7 @@ void KrashConfig :: readConfig()
m_frameRegExp = debuggers.readEntry("FrameRegExp"); m_frameRegExp = debuggers.readEntry("FrameRegExp");
m_neededInValidBacktraceRegExp = debuggers.readEntry("NeededInValidBacktraceRegExp"); m_neededInValidBacktraceRegExp = debuggers.readEntry("NeededInValidBacktraceRegExp");
m_kcrashRegExp = debuggers.readEntry("TDECrashRegExp"); m_kcrashRegExp = debuggers.readEntry("TDECrashRegExp");
m_kcrashRegExpSingle = debuggers.readEntry("TDECrashRegExpSingle");
TDEConfig preset(TQString::fromLatin1("presets/%1rc").arg(configname), TDEConfig preset(TQString::fromLatin1("presets/%1rc").arg(configname),
true, false, "appdata"); true, false, "appdata");

@ -66,6 +66,7 @@ public:
TQString frameRegExp() const { return m_frameRegExp; } TQString frameRegExp() const { return m_frameRegExp; }
TQString neededInValidBacktraceRegExp() const { return m_neededInValidBacktraceRegExp; } TQString neededInValidBacktraceRegExp() const { return m_neededInValidBacktraceRegExp; }
TQString kcrashRegExp() const { return m_kcrashRegExp; } TQString kcrashRegExp() const { return m_kcrashRegExp; }
TQString kcrashRegExpSingle() const { return m_kcrashRegExpSingle; }
bool showBacktrace() const { return m_showbacktrace; }; bool showBacktrace() const { return m_showbacktrace; };
bool showDebugger() const { return m_showdebugger && !m_debugger.isNull(); }; bool showDebugger() const { return m_showdebugger && !m_debugger.isNull(); };
bool showBugReport() const { return m_showbugreport; }; bool showBugReport() const { return m_showbugreport; };
@ -108,6 +109,7 @@ private:
TQString m_frameRegExp; TQString m_frameRegExp;
TQString m_neededInValidBacktraceRegExp; TQString m_neededInValidBacktraceRegExp;
TQString m_kcrashRegExp; TQString m_kcrashRegExp;
TQString m_kcrashRegExpSingle;
}; };
#endif #endif

Loading…
Cancel
Save