diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index a4e645de48b0c86a31651b90632b1539672e859d..3307a473e466e12dc3139ebb00729520bc21a8b4 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 1a5a0833fd087c8ba04fae7ebc51c66896f34598..5636224ea3a9adb502fc3ed045e9e96fbdeb922c 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);
         }
     }