From c448ae842d10e476b586871ef9713633047881e7 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Thu, 18 Nov 2010 15:47:50 +0100
Subject: [PATCH] debugger: fix markers for breakpoints in constructors

---
 src/plugins/debugger/breakhandler.cpp  |  3 ++-
 src/plugins/debugger/gdb/gdbengine.cpp | 16 +++++++++++-----
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index a4e645de48b..3307a473e46 100644
--- a/src/plugins/debugger/breakhandler.cpp
+++ b/src/plugins/debugger/breakhandler.cpp
@@ -407,7 +407,7 @@ QVariant BreakHandler::data(const QModelIndex &mi, int role) const
                 if (!response.fileName.isEmpty())
                     str = response.fileName;
                 if (str.isEmpty() && !data.fileName.isEmpty())
-                    str = response.fileName;
+                    str = data.fileName;
                 if (str.isEmpty()) {
                     QString s = QFileInfo(str).fileName();
                     if (!s.isEmpty())
@@ -582,6 +582,7 @@ void BreakHandler::setEngine(BreakpointId id, DebuggerEngine *value)
     it->engine = value;
     it->state = BreakpointInsertRequested;
     it->response = BreakpointResponse();
+    it->response.fileName = it->data.fileName;
     updateMarker(id);
     scheduleSynchronization();
 }
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 1a5a0833fd0..5636224ea3a 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -1168,12 +1168,18 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
 
     if (bkptno && frame.isValid()) {
         // Use opportunity to update the marker position.
-        const QString fileName =
-            QString::fromUtf8(frame.findChild("fullname").data());
-        const int lineNumber = frame.findChild("line").data().toInt();
+        BreakHandler *handler = breakHandler();
+        BreakpointId id = handler->findBreakpointByNumber(bkptno);
+        const BreakpointResponse &response = handler->response(id);
+        QString fileName = response.fileName;
+        if (fileName.isEmpty())
+            fileName = handler->fileName(id);
+        if (fileName.isEmpty())
+            fileName = QString::fromUtf8(frame.findChild("fullname").data());
+        if (fileName.isEmpty())
+            fileName = QString::fromUtf8(frame.findChild("file").data());
         if (!fileName.isEmpty()) {
-            BreakHandler *handler = breakHandler();
-            BreakpointId id = handler->findBreakpointByNumber(bkptno);
+            int lineNumber = frame.findChild("line").data().toInt();
             handler->setMarkerFileAndLine(id, fileName, lineNumber);
         }
     }
-- 
GitLab