diff --git a/src/plugins/debugger/gdb/localplaingdbadapter.cpp b/src/plugins/debugger/gdb/localplaingdbadapter.cpp index a5f168f081a1c76588af74fbd81f16b943b6d9ab..7589c6290f144888f0fa3aa02de1cecf7798bb6d 100644 --- a/src/plugins/debugger/gdb/localplaingdbadapter.cpp +++ b/src/plugins/debugger/gdb/localplaingdbadapter.cpp @@ -36,6 +36,8 @@ #include <utils/qtcassert.h> #include <QtCore/QFileInfo> +#include <QtCore/QProcess> +#include <QtGui/QMessageBox> namespace Debugger { namespace Internal { @@ -90,6 +92,33 @@ void LocalPlainGdbAdapter::startAdapter() } emit adapterStarted(); + checkForReleaseBuild(); +} + +void LocalPlainGdbAdapter::checkForReleaseBuild() +{ + // Quick check for a "release" build + QProcess proc; + QStringList args; + args.append(_("-h")); + args.append(_("-j")); + args.append(_(".debug_info")); + args.append(startParameters().executable); + proc.start(_("objdump"), args); + proc.closeWriteChannel(); + QTC_ASSERT(proc.waitForStarted(), qDebug() << "UNABLE TO RUN OBJDUMP"); + proc.waitForFinished(); + QByteArray ba = proc.readAllStandardOutput(); + // This should yield something like + // "debuggertest: file format elf32-i386\n\n" + // "Sections:\nIdx Name Size VMA LMA File off Algn\n" + // "30 .debug_info 00087d36 00000000 00000000 0006bbd5 2**0\n" + // " CONTENTS, READONLY, DEBUGGING" + if (ba.contains("Sections:") && !ba.contains(".debug_info")) { + m_engine->showMessageBox(QMessageBox::Information, "Warning", + tr("This does not seem to be a \"Debug\" build.\n" + "Setting breakpoints by file name and line number may fail.")); + } } void LocalPlainGdbAdapter::interruptInferior() diff --git a/src/plugins/debugger/gdb/localplaingdbadapter.h b/src/plugins/debugger/gdb/localplaingdbadapter.h index 4b9f6a69d3657725934b0d7639dcada7ebe25b43..12a0bc821170d20f913463e84b15654f1fefd394 100644 --- a/src/plugins/debugger/gdb/localplaingdbadapter.h +++ b/src/plugins/debugger/gdb/localplaingdbadapter.h @@ -64,6 +64,7 @@ private: virtual bool infoTargetNecessary() const; virtual QByteArray toLocalEncoding(const QString &s) const; virtual QString fromLocalEncoding(const QByteArray &b) const; + void checkForReleaseBuild(); OutputCollector m_outputCollector; LocalGdbProcess m_gdbProc;