Commit b9002dc7 authored by hjk's avatar hjk Committed by hjk
Browse files

debugger: take actual breakpoints into account for source locations

Change-Id: I5cf2982812456249fca2f233514cb90bb8d3bfe0
Reviewed-on: http://codereview.qt-project.org/5799

Reviewed-by: default avatarhjk <qthjk@ovi.com>
parent 1a07c183
......@@ -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,16 +4758,45 @@ void GdbEngine::handleAdapterStarted()
void GdbEngine::setupInferior()
{
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
typedef GlobalDebuggerOptions::SourcePathMap SourcePathMap;
typedef SourcePathMap::const_iterator SourcePathMapIterator;
showStatusMessage(tr("Setting up inferior..."));
const DebuggerStartParameters &sp = startParameters();
// Apply source path mappings from global options.
const SourcePathMap sourcePathMap =
DebuggerSourcePathMappingWidget::mergePlatformQtPath(sp.qtInstallPath,
debuggerCore()->globalDebuggerOptions()->sourcePathMap);
const SourcePathMapIterator cend = sourcePathMap.constEnd();
SourcePathMapIterator it = sourcePathMap.constBegin();
for ( ; it != cend; ++it) {
QByteArray command = "set substitute-path ";
command += it.key().toLocal8Bit();
command += ' ';
command += it.value().toLocal8Bit();
postCommand(command);
}
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());
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();
}
......@@ -4781,29 +4810,10 @@ void GdbEngine::notifyInferiorSetupFailed()
void GdbEngine::handleInferiorPrepared()
{
typedef GlobalDebuggerOptions::SourcePathMap SourcePathMap;
typedef SourcePathMap::const_iterator SourcePathMapIterator;
const DebuggerStartParameters &sp = startParameters();
QTC_ASSERT(state() == InferiorSetupRequested, qDebug() << state());
// Apply source path mappings from global options.
const SourcePathMap sourcePathMap =
DebuggerSourcePathMappingWidget::mergePlatformQtPath(sp.qtInstallPath,
debuggerCore()->globalDebuggerOptions()->sourcePathMap);
const SourcePathMapIterator cend = sourcePathMap.constEnd();
SourcePathMapIterator it = sourcePathMap.constBegin();
for ( ; it != cend; ++it) {
QByteArray command = "set substitute-path ";
command += it.key().toLocal8Bit();
command += ' ';
command += it.value().toLocal8Bit();
postCommand(command);
}
if (!sp.sysroot.isEmpty())
postCommand("set substitute-path / " + sp.sysroot.toLocal8Bit());
// Initial attempt to set breakpoints.
if (sp.startMode != AttachCore && !isSlaveEngine()) {
showStatusMessage(tr("Setting breakpoints..."));
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment