diff --git a/ide/fpdebug.pas b/ide/fpdebug.pas index d5ebe8f5a2..5a1e6bc9aa 100644 --- a/ide/fpdebug.pas +++ b/ide/fpdebug.pas @@ -1014,7 +1014,7 @@ end; procedure TDebugController.UntilReturn; begin - Command('finish'); + inherited UntilReturn; UpdateDebugViews; { We could try to get the return value ! Not done yet } diff --git a/ide/gdbmicon.pas b/ide/gdbmicon.pas index 01b3c1655b..078d881408 100644 --- a/ide/gdbmicon.pas +++ b/ide/gdbmicon.pas @@ -47,6 +47,7 @@ type procedure TraceStepI; procedure TraceNextI; procedure Continue; virtual; + procedure UntilReturn; virtual; function LoadFile(var fn: string): Boolean; procedure SetDir(const s: string); procedure SetArgs(const s: string); @@ -155,6 +156,13 @@ begin WaitForProgramStop; end; +procedure TGDBController.UntilReturn; +begin + UserScreen; + Command('-exec-finish'); + WaitForProgramStop; +end; + function TGDBController.LoadFile(var fn: string): Boolean; var cmd: string; diff --git a/ide/gdbmiint.pas b/ide/gdbmiint.pas index f471bd0c9b..7827362cd0 100644 --- a/ide/gdbmiint.pas +++ b/ide/gdbmiint.pas @@ -291,6 +291,13 @@ begin current_pc := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['addr'].AsPtrInt; DoSelectSourceLine(GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['fullname'].AsString, GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['line'].AsLongInt); end; + 'function-finished': + begin + DebuggerScreen; + Debuggee_started := True; + current_pc := GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['addr'].AsPtrInt; + DoSelectSourceLine(GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['fullname'].AsString, GDB.ExecAsyncOutput.Parameters['frame'].AsTuple['line'].AsLongInt); + end; 'exited': begin DebuggerScreen; diff --git a/packages/gdbint/src/gdbcon.pp b/packages/gdbint/src/gdbcon.pp index 889f894c6f..fb38cd3eb4 100644 --- a/packages/gdbint/src/gdbcon.pp +++ b/packages/gdbint/src/gdbcon.pp @@ -47,6 +47,7 @@ type procedure TraceStepI;virtual; procedure TraceNextI;virtual; procedure Continue;virtual; + procedure UntilReturn;virtual; { needed for dos because newlines are only #10 (PM) } procedure WriteErrorBuf; procedure WriteOutputBuf; @@ -295,6 +296,12 @@ begin end; +procedure TGDBController.UntilReturn; +begin + Command('finish'); +end; + + procedure TGDBController.ClearSymbols; begin if debuggee_started then