From 40f0d4d7c32e398b29f08266e79ea4d9cdcd730f Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Wed, 3 Feb 2010 16:50:28 +0100 Subject: [PATCH] Debuggers: Enable Python-dumpers for Windows-built gdb. Engine: Introduce convention of setting the PYTHONPATH variable to <path-to-gdb>\python2.5 for WIndows. Dumpers: Import 'curses' depending on platform, fix Syntax for 2.5, catch file lock errors by os.remove. Reviewed-by: hjk --- share/qtcreator/gdbmacros/dumper.py | 19 +++++++++++++------ src/plugins/debugger/debuggeractions.cpp | 6 +++++- src/plugins/debugger/gdb/gdbengine.cpp | 24 ++++++++++++++++++++++++ src/plugins/debugger/gdb/trkgdbadapter.h | 1 - src/plugins/debugger/gdb/trkoptions.cpp | 4 ++-- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py index d70932a5563..c7836431a27 100644 --- a/share/qtcreator/gdbmacros/dumper.py +++ b/share/qtcreator/gdbmacros/dumper.py @@ -7,7 +7,10 @@ import sys import traceback import gdb import base64 -import curses.ascii +import os + +if os.name != "nt": + import curses.ascii # only needed for gdb 7.0/7.0.1 that do not implement parse_and_eval import os @@ -40,7 +43,7 @@ def cleanAddress(addr): def numericTemplateArgument(type, position): try: return int(type.template_argument(position)) - except RuntimeError as error: + except RuntimeError, error: # ": No type named 30." msg = str(error) return int(msg[14:-1]) @@ -103,8 +106,10 @@ def listOfBreakpoints(d): continue lines.append(line) file.close() - os.remove(filename) - + try: # files may still be locked by gdb on Windows + os.remove(filename) + except: + pass lines.reverse() bp = Breakpoint() for line in lines: @@ -254,8 +259,10 @@ def listOfLocals(varList): continue varList.append(line[0:pos]) file.close() - os.remove(filename) - + try: # files may still be locked by gdb on Windows + os.remove(filename) + except: + pass #warn("VARLIST: %s " % varList) for name in varList: #warn("NAME %s " % name) diff --git a/src/plugins/debugger/debuggeractions.cpp b/src/plugins/debugger/debuggeractions.cpp index 2f05b16231b..b5d01f00d88 100644 --- a/src/plugins/debugger/debuggeractions.cpp +++ b/src/plugins/debugger/debuggeractions.cpp @@ -284,7 +284,11 @@ DebuggerSettings *DebuggerSettings::instance() // item = new SavedAction(instance); item->setSettingsKey(debugModeGroup, QLatin1String("Location")); - item->setDefaultValue("gdb"); +#ifdef Q_OS_WIN + item->setDefaultValue(QLatin1String("gdb-i686-pc-mingw32.exe")); +#else + item->setDefaultValue(QLatin1String("gdb")); +#endif instance->insertItem(GdbLocation, item); item = new SavedAction(instance); diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 1f790572509..3d7f6343f08 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -96,6 +96,8 @@ namespace Internal { //#define DEBUG_PENDING 1 +static const char winPythonVersionC[] = "python2.5"; + #if DEBUG_PENDING # define PENDING_DEBUG(s) qDebug() << s #else @@ -3740,6 +3742,28 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr gdbArgs << _("-i"); gdbArgs << _("mi"); gdbArgs += args; +#ifdef Q_OS_WIN + // Set python path. By convention, python is located below gdb executable + const QFileInfo fi(location); + if (fi.isAbsolute()) { + const QString winPythonVersion = QLatin1String(winPythonVersionC); + const QDir dir = fi.absoluteDir(); + if (dir.exists(winPythonVersion)) { + QProcessEnvironment environment = QProcessEnvironment::systemEnvironment(); + const QString pythonPathVariable = QLatin1String("PYTHONPATH"); + // Check for existing values. + if (environment.contains(pythonPathVariable)) { + const QString oldPythonPath = environment.value(pythonPathVariable); + manager()->showDebuggerOutput(LogMisc, QString::fromLatin1("Using existing python path: %1").arg(oldPythonPath)); + } else { + const QString pythonPath = QDir::toNativeSeparators(dir.absoluteFilePath(winPythonVersion)); + environment.insert(pythonPathVariable, pythonPath); + manager()->showDebuggerOutput(LogMisc, QString::fromLatin1("Python path: %1").arg(pythonPath)); + m_gdbProc.setProcessEnvironment(environment); + } + } + } +#endif m_gdbProc.start(location, gdbArgs); if (!m_gdbProc.waitForStarted()) { diff --git a/src/plugins/debugger/gdb/trkgdbadapter.h b/src/plugins/debugger/gdb/trkgdbadapter.h index 84756dc388f..0c5a4af7206 100644 --- a/src/plugins/debugger/gdb/trkgdbadapter.h +++ b/src/plugins/debugger/gdb/trkgdbadapter.h @@ -40,7 +40,6 @@ #include <QtCore/QHash> #include <QtCore/QPointer> #include <QtCore/QSharedPointer> -#include <QtCore/QProcess> #include <QtCore/QQueue> #include <QtCore/QString> #include <QtCore/QStringList> diff --git a/src/plugins/debugger/gdb/trkoptions.cpp b/src/plugins/debugger/gdb/trkoptions.cpp index d67204615c9..8a31923b6fc 100644 --- a/src/plugins/debugger/gdb/trkoptions.cpp +++ b/src/plugins/debugger/gdb/trkoptions.cpp @@ -39,13 +39,13 @@ enum { firstSerialPort = 1, lastSerialPort = 12 }; enum { modeDefault = Debugger::Internal::TrkOptions::Serial }; static const char *serialPortDefaultC = SERIALPORT_ROOT"1"; -static const char *gdbDefaultC = "symgdb"; +static const char *gdbDefaultC = "gdb-arm-none-symbianelf.exe"; #else # define SERIALPORT_ROOT "/dev/ttyS" enum { firstSerialPort = 0, lastSerialPort = 3 }; enum { modeDefault = Debugger::Internal::TrkOptions::BlueTooth }; static const char *serialPortDefaultC = SERIALPORT_ROOT"0"; -static const char *gdbDefaultC = "symgdb"; +static const char *gdbDefaultC = "gdb-arm-none-symbianelf"; #endif static const char *settingsGroupC = "S60Debugger"; -- GitLab