OSDN Git Service

unbreak mac debugging again
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Tue, 24 Feb 2009 16:06:02 +0000 (17:06 +0100)
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Tue, 24 Feb 2009 16:06:02 +0000 (17:06 +0100)
setting the initial breakpoint at the entry point wreaks havoc, so set
it at main() instead. this will miss any breakpoints in global ctors and
(currently) makes it impossible to set an actual breakpoint at main.

src/plugins/debugger/gdbengine.cpp

index d639656..25879e6 100644 (file)
@@ -1664,8 +1664,14 @@ bool GdbEngine::startDebugger()
             sendCommand("-exec-arguments " + q->m_processArgs.join(" "));
         #ifndef Q_OS_MAC
         sendCommand("set auto-solib-add off");
-        #endif
         sendCommand("info target", GdbStart);
+        #else
+        // On MacOS, breaking in at the entry point wreaks havoc.
+        sendCommand("tbreak main");
+        m_waitingForFirstBreakpointToBeHit = true;
+        qq->notifyInferiorRunningRequested();
+        sendCommand("-exec-run");
+        #endif
     }
 
     // set all to "pending"
@@ -1687,18 +1693,10 @@ void GdbEngine::continueInferior()
 
 void GdbEngine::handleStart(const GdbResultRecord &response)
 {
-    if (response.resultClass == GdbResultDone) {
 #ifdef Q_OS_MAC
-        QString addr = response.data.findChild("section-info").findChild("entry-point").data();
-        if (!addr.isEmpty()) {
-            sendCommand("tbreak *" + addr);
-            m_waitingForFirstBreakpointToBeHit = true;
-            qq->notifyInferiorRunningRequested();
-            sendCommand("-exec-run");
-        } else {
-            debugMessage("CANNOT OBTAIN START ADDRESS");
-        }
+    Q_UNUSED(response);
 #else
+    if (response.resultClass == GdbResultDone) {
         // [some leading stdout here]
         // stdout:&"        Entry point: 0x80831f0  0x08048134 - 0x08048147 is .interp\n"
         // [some trailing stdout here]
@@ -1713,10 +1711,10 @@ void GdbEngine::handleStart(const GdbResultRecord &response)
         } else {
             debugMessage("PARSING START ADDRESS FAILED: " + msg);
         }
-#endif
     } else if (response.resultClass == GdbResultError) {
         debugMessage("FETCHING START ADDRESS FAILED: " + response.toString());
     }
+#endif
 }
 
 void GdbEngine::handleAttach()