diff --git a/packages/ide/gdbmiint.pas b/packages/ide/gdbmiint.pas
index 874d6be8e0..f867de10e7 100644
--- a/packages/ide/gdbmiint.pas
+++ b/packages/ide/gdbmiint.pas
@@ -409,12 +409,24 @@ Ignore:
         else
           BreakpointNo := 0;
 
-        Addr := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['addr'].AsCoreAddr;
-        if Assigned(GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['fullname']) then
-          FileName := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['fullname'].AsString;
-        if Assigned(GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['line']) then
-          LineNumber := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['line'].AsLongInt;
-
+        if Assigned(GDB.ExecAsyncOutput.Parameters['frame']) then
+          begin
+            if Assigned(GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['addr']) then
+              Addr := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['addr'].AsCoreAddr
+            else
+              Addr := 0;
+            if Assigned(GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['fullname']) then
+              FileName := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['fullname'].AsString;
+            if Assigned(GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['line']) then
+              LineNumber := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['line'].AsLongInt;
+          end
+        else
+          begin
+            if Assigned(GDB.ExecAsyncOutput.Parameters['fullname']) then
+              FileName := GDB.ExecAsyncOutput.Parameters['fullname'].AsString;
+            if Assigned(GDB.ExecAsyncOutput.Parameters['line']) then
+              LineNumber := GDB.ExecAsyncOutput.Parameters['line'].AsLongInt;
+          end;
         { this kills GDB.ExecAsyncOutput, because it may execute other gdb commands, so
           make sure we have read all parameters that we need to local variables before that }
         DebuggerScreen;