summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2009-02-11 14:17:25 +0100
committerhjk <qtc-committer@nokia.com>2009-02-11 14:17:25 +0100
commitdf16699ed9958584bb53e8790ccbcdc1e4b42dbb (patch)
tree0663469dcc7046af81cb2c5363c7254ab1da8cda
parent9e2671c9a3d8cc86f9a79721dfa9a0690e1bdc94 (diff)
downloadqt-creator-df16699ed9958584bb53e8790ccbcdc1e4b42dbb.tar.gz
Fixes: debugger: revert accidental parts of b0650238
-rw-r--r--share/qtcreator/gdbmacros/gdbmacros.cpp2
-rw-r--r--src/plugins/debugger/gdbengine.cpp194
-rw-r--r--src/plugins/debugger/procinterrupt.cpp2
3 files changed, 100 insertions, 98 deletions
diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp
index 1da444113e..ae00613350 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.cpp
+++ b/share/qtcreator/gdbmacros/gdbmacros.cpp
@@ -68,6 +68,7 @@ int qtGhVersion = QT_VERSION;
#include <ctype.h>
#include <stdio.h>
+#include <unistd.h>
#ifdef Q_OS_WIN
# include <windows.h>
@@ -2484,6 +2485,7 @@ void qDumpObjectData440(
int extraInt2,
int extraInt3)
{
+ //sleep(20);
if (protocolVersion == 1) {
QDumper d;
d.protocolVersion = protocolVersion;
diff --git a/src/plugins/debugger/gdbengine.cpp b/src/plugins/debugger/gdbengine.cpp
index c8336c101c..8a5398f01f 100644
--- a/src/plugins/debugger/gdbengine.cpp
+++ b/src/plugins/debugger/gdbengine.cpp
@@ -3586,121 +3586,121 @@ void GdbEngine::handleDumpCustomValue2(const GdbResultRecord &record,
void GdbEngine::updateLocals()
{
-setTokenBarrier();
+ setTokenBarrier();
-m_pendingRequests = 0;
-PENDING_DEBUG("\nRESET PENDING");
-m_toolTipCache.clear();
-m_toolTipExpression.clear();
-qq->watchHandler()->reinitializeWatchers();
+ m_pendingRequests = 0;
+ PENDING_DEBUG("\nRESET PENDING");
+ m_toolTipCache.clear();
+ m_toolTipExpression.clear();
+ qq->watchHandler()->reinitializeWatchers();
-int level = currentFrame();
-// '2' is 'list with type and value'
-QString cmd = QString("-stack-list-arguments 2 %1 %2").arg(level).arg(level);
-sendSynchronizedCommand(cmd, StackListArguments); // stage 1/2
-// '2' is 'list with type and value'
-sendSynchronizedCommand("-stack-list-locals 2", StackListLocals); // stage 2/2
+ int level = currentFrame();
+ // '2' is 'list with type and value'
+ QString cmd = QString("-stack-list-arguments 2 %1 %2").arg(level).arg(level);
+ sendSynchronizedCommand(cmd, StackListArguments); // stage 1/2
+ // '2' is 'list with type and value'
+ sendSynchronizedCommand("-stack-list-locals 2", StackListLocals); // stage 2/2
}
void GdbEngine::handleStackListArguments(const GdbResultRecord &record)
{
-// stage 1/2
-
-// Linux:
-// 12^done,stack-args=
-// [frame={level="0",args=[
-// {name="argc",type="int",value="1"},
-// {name="argv",type="char **",value="(char **) 0x7..."}]}]
-// Mac:
-// 78^done,stack-args=
-// {frame={level="0",args={
-// varobj=
-// {exp="this",value="0x38a2fab0",name="var21",numchild="3",
-// type="CurrentDocumentFind * const",typecode="PTR",
-// dynamic_type="",in_scope="true",block_start_addr="0x3938e946",
-// block_end_addr="0x3938eb2d"},
-// varobj=
-// {exp="before",value="@0xbfffb9f8: {d = 0x3a7f2a70}",
-// name="var22",numchild="1",type="const QString ...} }}}
-//
-// In both cases, iterating over the children of stack-args/frame/args
-// is ok.
-m_currentFunctionArgs.clear();
-if (record.resultClass == GdbResultDone) {
- const GdbMi list = record.data.findChild("stack-args");
- const GdbMi frame = list.findChild("frame");
- const GdbMi args = frame.findChild("args");
- m_currentFunctionArgs = args.children();
-} else if (record.resultClass == GdbResultError) {
- qDebug() << "FIXME: GdbEngine::handleStackListArguments: should not happen";
-}
+ // stage 1/2
+
+ // Linux:
+ // 12^done,stack-args=
+ // [frame={level="0",args=[
+ // {name="argc",type="int",value="1"},
+ // {name="argv",type="char **",value="(char **) 0x7..."}]}]
+ // Mac:
+ // 78^done,stack-args=
+ // {frame={level="0",args={
+ // varobj=
+ // {exp="this",value="0x38a2fab0",name="var21",numchild="3",
+ // type="CurrentDocumentFind * const",typecode="PTR",
+ // dynamic_type="",in_scope="true",block_start_addr="0x3938e946",
+ // block_end_addr="0x3938eb2d"},
+ // varobj=
+ // {exp="before",value="@0xbfffb9f8: {d = 0x3a7f2a70}",
+ // name="var22",numchild="1",type="const QString ...} }}}
+ //
+ // In both cases, iterating over the children of stack-args/frame/args
+ // is ok.
+ m_currentFunctionArgs.clear();
+ if (record.resultClass == GdbResultDone) {
+ const GdbMi list = record.data.findChild("stack-args");
+ const GdbMi frame = list.findChild("frame");
+ const GdbMi args = frame.findChild("args");
+ m_currentFunctionArgs = args.children();
+ } else if (record.resultClass == GdbResultError) {
+ qDebug() << "FIXME: GdbEngine::handleStackListArguments: should not happen";
+ }
}
void GdbEngine::handleStackListLocals(const GdbResultRecord &record)
{
-// stage 2/2
+ // stage 2/2
-// There could be shadowed variables
-QList<GdbMi> locals = record.data.findChild("locals").children();
-locals += m_currentFunctionArgs;
+ // There could be shadowed variables
+ QList<GdbMi> locals = record.data.findChild("locals").children();
+ locals += m_currentFunctionArgs;
-setLocals(locals);
+ setLocals(locals);
}
void GdbEngine::setLocals(const QList<GdbMi> &locals)
{
-//qDebug() << m_varToType;
-QHash<QString, int> seen;
-
-foreach (const GdbMi &item, locals) {
- // Local variables of inlined code are reported as
- // 26^done,locals={varobj={exp="this",value="",name="var4",exp="this",
- // numchild="1",type="const QtSharedPointer::Basic<CPlusPlus::..."
- // We do not want these at all. Current hypotheses is that those
- // "spurious" locals have _two_ "exp" field. Try to filter them:
- #ifdef Q_OS_MAC
- int numExps = 0;
- foreach (const GdbMi &child, item.children())
- numExps += int(child.name() == "exp");
- if (numExps > 1)
- continue;
- QString name = item.findChild("exp").data();
- #else
- QString name = item.findChild("name").data();
- #endif
- int n = seen.value(name);
- if (n) {
- seen[name] = n + 1;
- WatchData data;
- data.iname = "local." + name + QString::number(n + 1);
- data.name = name + QString(" <shadowed %1>").arg(n);
- //data.setValue("<shadowed>");
- setWatchDataValue(data, item.findChild("value"));
- data.setType("<shadowed>");
- data.setChildCount(0);
- insertData(data);
- } else {
- seen[name] = 1;
- WatchData data;
- data.iname = "local." + name;
- data.name = name;
- data.exp = name;
- data.framekey = m_currentFrame + data.name;
- setWatchDataType(data, item.findChild("type"));
- // set value only directly if it is simple enough, otherwise
- // pass through the insertData() machinery
- if (isIntOrFloatType(data.type) || isPointerType(data.type))
+ //qDebug() << m_varToType;
+ QHash<QString, int> seen;
+
+ foreach (const GdbMi &item, locals) {
+ // Local variables of inlined code are reported as
+ // 26^done,locals={varobj={exp="this",value="",name="var4",exp="this",
+ // numchild="1",type="const QtSharedPointer::Basic<CPlusPlus::..."
+ // We do not want these at all. Current hypotheses is that those
+ // "spurious" locals have _two_ "exp" field. Try to filter them:
+ #ifdef Q_OS_MAC
+ int numExps = 0;
+ foreach (const GdbMi &child, item.children())
+ numExps += int(child.name() == "exp");
+ if (numExps > 1)
+ continue;
+ QString name = item.findChild("exp").data();
+ #else
+ QString name = item.findChild("name").data();
+ #endif
+ int n = seen.value(name);
+ if (n) {
+ seen[name] = n + 1;
+ WatchData data;
+ data.iname = "local." + name + QString::number(n + 1);
+ data.name = name + QString(" <shadowed %1>").arg(n);
+ //data.setValue("<shadowed>");
setWatchDataValue(data, item.findChild("value"));
- if (!qq->watchHandler()->isExpandedIName(data.iname))
- data.setChildrenUnneeded();
- if (isPointerType(data.type) || data.name == "this")
- data.setChildCount(1);
- if (0 && m_varToType.contains(data.framekey)) {
- qDebug() << "RE-USING " << m_varToType.value(data.framekey);
- data.setType(m_varToType.value(data.framekey));
+ data.setType("<shadowed>");
+ data.setChildCount(0);
+ insertData(data);
+ } else {
+ seen[name] = 1;
+ WatchData data;
+ data.iname = "local." + name;
+ data.name = name;
+ data.exp = name;
+ data.framekey = m_currentFrame + data.name;
+ setWatchDataType(data, item.findChild("type"));
+ // set value only directly if it is simple enough, otherwise
+ // pass through the insertData() machinery
+ if (isIntOrFloatType(data.type) || isPointerType(data.type))
+ setWatchDataValue(data, item.findChild("value"));
+ if (!qq->watchHandler()->isExpandedIName(data.iname))
+ data.setChildrenUnneeded();
+ if (isPointerType(data.type) || data.name == "this")
+ data.setChildCount(1);
+ if (0 && m_varToType.contains(data.framekey)) {
+ qDebug() << "RE-USING " << m_varToType.value(data.framekey);
+ data.setType(m_varToType.value(data.framekey));
+ }
+ insertData(data);
}
- insertData(data);
- }
}
}
diff --git a/src/plugins/debugger/procinterrupt.cpp b/src/plugins/debugger/procinterrupt.cpp
index 08f7d39280..824ccac41f 100644
--- a/src/plugins/debugger/procinterrupt.cpp
+++ b/src/plugins/debugger/procinterrupt.cpp
@@ -161,7 +161,7 @@ bool Debugger::Internal::interruptProcess(int pID)
#else
int procId = pID;
if (procId != -1) {
- if (kill(procId, 2) == 0)
+ if (kill(procId, SIGINT) == 0)
return true;
}