forked from qt-creator/qt-creator
debugger: take actual breakpoints into account for source locations
Change-Id: I5cf2982812456249fca2f233514cb90bb8d3bfe0 Reviewed-on: http://codereview.qt-project.org/5799 Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
@@ -1259,6 +1259,19 @@ BreakpointModelIds BreakHandler::engineBreakpointIds(DebuggerEngine *engine) con
|
||||
return ids;
|
||||
}
|
||||
|
||||
QStringList BreakHandler::engineBreakpointPaths(DebuggerEngine *engine) const
|
||||
{
|
||||
QSet<QString> set;
|
||||
ConstIterator it = m_storage.constBegin(), et = m_storage.constEnd();
|
||||
for ( ; it != et; ++it) {
|
||||
if (it->engine == engine) {
|
||||
if (it->data.type == BreakpointByFileAndLine)
|
||||
set.insert(QFileInfo(it->data.fileName).dir().path());
|
||||
}
|
||||
}
|
||||
return set.toList();
|
||||
}
|
||||
|
||||
void BreakHandler::cleanupBreakpoint(BreakpointModelId id)
|
||||
{
|
||||
QTC_ASSERT(state(id) == BreakpointDead, qDebug() << state(id));
|
||||
|
||||
@@ -79,6 +79,7 @@ public:
|
||||
BreakpointModelIds engineBreakpointIds(DebuggerEngine *engine) const;
|
||||
BreakpointModelIds unclaimedBreakpointIds() const;
|
||||
int size() const { return m_storage.size(); }
|
||||
QStringList engineBreakpointPaths(DebuggerEngine *engine) const;
|
||||
|
||||
// Find a breakpoint matching approximately the data in needle.
|
||||
BreakpointModelId findSimilarBreakpoint(const BreakpointResponse &needle) const;
|
||||
|
||||
@@ -1198,11 +1198,10 @@ void DebuggerPluginPrivate::maybeEnrichParameters(DebuggerStartParameters *sp)
|
||||
return;
|
||||
if (sp->sysroot.isEmpty() && (sp->startMode == AttachToRemoteServer
|
||||
|| sp->startMode == StartRemote)) {
|
||||
// FIXME: Get from BaseQtVersion
|
||||
// FIXME: Get from BaseQtVersion.
|
||||
sp->sysroot = QString::fromLocal8Bit(qgetenv("QTC_DEBUGGER_SYSROOT"));
|
||||
//if (sp->sysroot.isEmpty())
|
||||
// sp->sysroot = debuggerCore()->configValue(_("LastSysroot")).toString();
|
||||
showMessage(QLatin1String("### USING FAKE SYSROOT ###") + sp->sysroot, LogWarning);
|
||||
showMessage(QString::fromLatin1("USING QTC_DEBUGGER_SYSROOT %1")
|
||||
.arg(sp->sysroot), LogWarning);
|
||||
}
|
||||
if (sp->debugInfoLocation.isEmpty())
|
||||
sp->debugInfoLocation = sp->sysroot + "/usr/lib/debug";
|
||||
|
||||
@@ -4758,34 +4758,11 @@ void GdbEngine::handleAdapterStarted()
|
||||
void GdbEngine::setupInferior()
|
||||
{
|
||||
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
|
||||
showStatusMessage(tr("Setting up inferior..."));
|
||||
const DebuggerStartParameters &sp = startParameters();
|
||||
const QByteArray debugInfoLocation = sp.debugInfoLocation.toLocal8Bit();
|
||||
if (!debugInfoLocation.isEmpty())
|
||||
postCommand("set debug-file-directory " + debugInfoLocation);
|
||||
// Spaces just will not work.
|
||||
foreach (const QString &src, sp.debugSourceLocation)
|
||||
postCommand("directory " + src.toLocal8Bit());
|
||||
if (!sp.solibSearchPath.isEmpty())
|
||||
postCommand("set solib-search-path " + sp.solibSearchPath.toLocal8Bit());
|
||||
m_gdbAdapter->setupInferior();
|
||||
}
|
||||
|
||||
void GdbEngine::notifyInferiorSetupFailed()
|
||||
{
|
||||
// FIXME: that's not enough to stop gdb from getting confused
|
||||
// by a timeout of the adapter.
|
||||
//resetCommandQueue();
|
||||
DebuggerEngine::notifyInferiorSetupFailed();
|
||||
}
|
||||
|
||||
void GdbEngine::handleInferiorPrepared()
|
||||
{
|
||||
typedef GlobalDebuggerOptions::SourcePathMap SourcePathMap;
|
||||
typedef SourcePathMap::const_iterator SourcePathMapIterator;
|
||||
const DebuggerStartParameters &sp = startParameters();
|
||||
|
||||
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
|
||||
showStatusMessage(tr("Setting up inferior..."));
|
||||
const DebuggerStartParameters &sp = startParameters();
|
||||
|
||||
// Apply source path mappings from global options.
|
||||
const SourcePathMap sourcePathMap =
|
||||
@@ -4804,6 +4781,39 @@ void GdbEngine::handleInferiorPrepared()
|
||||
if (!sp.sysroot.isEmpty())
|
||||
postCommand("set substitute-path / " + sp.sysroot.toLocal8Bit());
|
||||
|
||||
const QByteArray debugInfoLocation = sp.debugInfoLocation.toLocal8Bit();
|
||||
if (!debugInfoLocation.isEmpty())
|
||||
postCommand("set debug-file-directory " + debugInfoLocation);
|
||||
|
||||
// Spaces just will not work.
|
||||
foreach (const QString &src, sp.debugSourceLocation)
|
||||
postCommand("directory " + src.toLocal8Bit());
|
||||
if (!sp.solibSearchPath.isEmpty())
|
||||
postCommand("set solib-search-path " + sp.solibSearchPath.toLocal8Bit());
|
||||
|
||||
// Take locations of actual breakpoints into account.
|
||||
if (debuggerCore()->boolSetting(AutoEnrichParameters)) {
|
||||
foreach (const QString &src, breakHandler()->engineBreakpointPaths(this))
|
||||
postCommand("directory " + src.toLocal8Bit());
|
||||
}
|
||||
|
||||
m_gdbAdapter->setupInferior();
|
||||
}
|
||||
|
||||
void GdbEngine::notifyInferiorSetupFailed()
|
||||
{
|
||||
// FIXME: that's not enough to stop gdb from getting confused
|
||||
// by a timeout of the adapter.
|
||||
//resetCommandQueue();
|
||||
DebuggerEngine::notifyInferiorSetupFailed();
|
||||
}
|
||||
|
||||
void GdbEngine::handleInferiorPrepared()
|
||||
{
|
||||
const DebuggerStartParameters &sp = startParameters();
|
||||
|
||||
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
|
||||
|
||||
// Initial attempt to set breakpoints.
|
||||
if (sp.startMode != AttachCore && !isSlaveEngine()) {
|
||||
showStatusMessage(tr("Setting breakpoints..."));
|
||||
|
||||
Reference in New Issue
Block a user