mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-01 21:20:28 +02:00
Debugger: Notify if debugged app, exits with error code. Issue #37861
git-svn-id: trunk@63950 -
This commit is contained in:
parent
3baad5d70c
commit
7ab3261e30
@ -1838,6 +1838,7 @@ type
|
||||
FRegisters: TRegisterSupplier;
|
||||
FShowConsole: Boolean;
|
||||
FSignals: TDBGSignals;
|
||||
FSkipStopMessage: Boolean;
|
||||
FState: TDBGState;
|
||||
FCallStack: TCallStackSupplier;
|
||||
FWatches: TWatchesSupplier;
|
||||
@ -1966,6 +1967,7 @@ type
|
||||
property IsInReset: Boolean read FIsInReset;
|
||||
procedure AddNotifyEvent(AReason: TDebuggerNotifyReason; AnEvent: TNotifyEvent);
|
||||
procedure RemoveNotifyEvent(AReason: TDebuggerNotifyReason; AnEvent: TNotifyEvent);
|
||||
procedure SetSkipStopMessage;
|
||||
public
|
||||
property Arguments: String read FArguments write FArguments; // Arguments feed to the program
|
||||
property BreakPoints: TDBGBreakPoints read FBreakPoints; // list of all breakpoints
|
||||
@ -1997,6 +1999,7 @@ type
|
||||
property IsIdle: Boolean read GetIsIdle; // Nothing queued
|
||||
property ErrorStateMessage: String read FErrorStateMessage;
|
||||
property ErrorStateInfo: String read FErrorStateInfo;
|
||||
property SkipStopMessage: Boolean read FSkipStopMessage;
|
||||
//property UnitInfoProvider: TDebuggerUnitInfoProvider // Provided by DebugBoss, to map files to packages or project
|
||||
// read GetUnitInfoProvider write FUnitInfoProvider;
|
||||
// Events
|
||||
@ -5957,6 +5960,11 @@ begin
|
||||
FDestroyNotificationList[AReason].Remove(TMethod(AnEvent));
|
||||
end;
|
||||
|
||||
procedure TDebuggerIntf.SetSkipStopMessage;
|
||||
begin
|
||||
FSkipStopMessage := True;
|
||||
end;
|
||||
|
||||
class function TDebuggerIntf.SupportedCommandsFor(AState: TDBGState): TDBGCommands;
|
||||
begin
|
||||
Result := COMMANDMAP[AState] * GetSupportedCommands;
|
||||
@ -6407,6 +6415,8 @@ begin
|
||||
|
||||
if AValue <> FState
|
||||
then begin
|
||||
if AValue <> dsStop then
|
||||
FSkipStopMessage := False;
|
||||
DebugLnEnter(DBG_STATE, ['DebuggerState: Setting to ', dbgs(AValue),', from ', dbgs(FState)]);
|
||||
OldState := FState;
|
||||
FState := AValue;
|
||||
|
@ -5234,9 +5234,47 @@ function TGDBMIDebuggerCommandStartDebugging.DoExecute: Boolean;
|
||||
StoppedFile, StoppedLine: String;
|
||||
StoppedAddr: TDBGPtr;
|
||||
StoppedAtEntryPoint: Boolean;
|
||||
StateStopped: Boolean;
|
||||
const
|
||||
MIN_RELOC_ADDRESS = $4000;
|
||||
|
||||
function HandleStartError(R: TGDBMIExecResult): boolean;
|
||||
var
|
||||
List: TGDBMINameValueList;
|
||||
ErrMsg, s: String;
|
||||
begin
|
||||
Result := False; // no id found
|
||||
if R.State <> dsError then
|
||||
exit;
|
||||
List := nil;
|
||||
try
|
||||
List := TGDBMINameValueList.Create(R);
|
||||
ErrMsg := List.Values['msg'];
|
||||
if pos('program exited', ErrMsg) > 0 then begin
|
||||
Result := True;
|
||||
s := GetPart(['with code '], ['.'], ErrMsg, True, False);
|
||||
if s <> '' then begin
|
||||
FTheDebugger.SetExitCode(StrToIntDef(s, 0));
|
||||
end;
|
||||
DoDbgEvent(ecProcess, etProcessExit, Format(gdbmiEventLogProcessExitCode, [IntToStr(FTheDebugger.ExitCode)]));
|
||||
|
||||
if FTheDebugger.ExitCode = 0 then begin
|
||||
FTheDebugger.OnFeedback
|
||||
(self, Format(gdbmiCommandStartApplicationError, [LineEnding, ErrMsg]),
|
||||
'', ftInformation, [frOk]);
|
||||
FTheDebugger.SetSkipStopMessage;
|
||||
end;
|
||||
ExecuteCommand('kill', [cfNoThreadContext], 1500);
|
||||
StateStopped := True;
|
||||
if FTheDebugger.State = dsStop then
|
||||
SetDebuggerState(dsNone); // dsInit would trigger breakpoints...
|
||||
SetDebuggerState(dsStop);
|
||||
end;
|
||||
except
|
||||
end;
|
||||
List.Free;
|
||||
end;
|
||||
|
||||
procedure RunToMain(EntryPoint: String);
|
||||
type
|
||||
TRunToMainType = (mtMain, mtMainAddr, mtEntry, mtAddZero);
|
||||
@ -5394,10 +5432,14 @@ function TGDBMIDebuggerCommandStartDebugging.DoExecute: Boolean;
|
||||
DefaultTimeOut := 0;
|
||||
if not ExecuteCommand(Cmd, R, [cfTryAsync])
|
||||
then begin
|
||||
if HandleStartError(R) then
|
||||
exit;
|
||||
SetDebuggerErrorState(Format(gdbmiCommandStartMainRunError, [LineEnding]),
|
||||
ErrorStateInfo);
|
||||
exit;
|
||||
end;
|
||||
if HandleStartError(R) then
|
||||
exit;
|
||||
s := r.Values + FLogWarnings;
|
||||
if TargetInfo^.TargetPID = 0 then begin
|
||||
TargetInfo^.TargetPID := ParseLogForPid(s);
|
||||
@ -5415,6 +5457,8 @@ function TGDBMIDebuggerCommandStartDebugging.DoExecute: Boolean;
|
||||
if (TargetInfo^.TargetPID <> 0) then
|
||||
FCanKillNow := True;
|
||||
ProcessRunning(s2, R);
|
||||
if HandleStartError(R) then
|
||||
exit;
|
||||
FCanKillNow := False;
|
||||
FTheDebugger.FCurrentCmdIsAsync := False;
|
||||
j := ParseStopped(s2);
|
||||
@ -5541,7 +5585,6 @@ var
|
||||
FileType, EntryPoint: String;
|
||||
List: TGDBMINameValueList;
|
||||
CanContinue: Boolean;
|
||||
StateStopped: Boolean;
|
||||
DbgProp: TGDBMIDebuggerPropertiesBase;
|
||||
begin
|
||||
Result := True;
|
||||
|
@ -44,6 +44,7 @@ resourcestring
|
||||
+ 'This may be caused by missing debug info.';
|
||||
gdbmiCommandStartMainRunError = 'The debugger could not run the application.%0:s'
|
||||
+ 'This may be caused by missing debug info.';
|
||||
gdbmiCommandStartApplicationError = 'The application could not be started:%0:s%1s';
|
||||
gdbmiCommandStartMainRunToStopError = 'The debugger was unable to initialize itself.%0:s'
|
||||
+ 'The application did run (and terminated) before the debugger could set'
|
||||
+ ' any breakpoints. %0:s'
|
||||
|
@ -19,6 +19,11 @@ msgctxt "gdbmistringconstants.gdbmibreakpointerroronruncommand"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "El depurador ha detectado un error al intentar ejecutar/paso de la aplicación:%0:s%0:s%1:s%0:s%0:sPulsa \"Aceptar\" para eliminar los puntos de interrupción y continuar con la depuración (en pausa), y corregir el problema, o elegir un comando de arranque alternativo.%0:sPulsa \"Parar\" para finalizar la sesión de depuración."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgctxt "gdbmistringconstants.gdbmicommandstartmainbreakerror"
|
||||
|
@ -21,6 +21,11 @@ msgstr "Débogueur"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "Le débogueur a rencontré une erreur en essayant d'exécuter l'application : %0:s%0:s%1:s%0:s%0:sAppuyez sur \"Ok\" pour retirer les points d'arrêt et continuer le débogage (en pause), et corrigez le problème, ou choisissez une commande alternative. %0:sAppuyez sur \"Stop\" pour mettre fin à la session de débogage."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgid "The debugger could not set a breakpoint on the application's entry point.%0:sThis may be caused by missing debug info."
|
||||
|
@ -20,6 +20,11 @@ msgstr "Hibakereső"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "A hibakereső hibát észlelt amikor megpróbálta futtatni/léptetni az alkalmazást:%0:s%0:s%1:s%0:s%0:sAz \"Ok\"-ra nyomva eltávolítja a töréspontot és folytatja a hibakeresés (szünetel) valamint javíthatja a hibát vagy válasszon másik futtatóparancsot.%0:sA \"Stop\"-ra nyomva befejeződik a hibakeresés."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgid "The debugger could not set a breakpoint on the application's entry point.%0:sThis may be caused by missing debug info."
|
||||
|
@ -22,6 +22,11 @@ msgstr "Debugger"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "Il debugger ha incontrato un errore nel cercare di eseguire l'applicazione:%0:s%0:s%1:s%0:s%0:sPremere \"Ok\" per rimuovere i breakpoints e continuare il debug (ora in pausa), e correggere il problema, o scegliere un diverso comando di avvio.%0:sPremere \"Stop\" per terminare la sessione di debug."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgid "The debugger could not set a breakpoint on the application's entry point.%0:sThis may be caused by missing debug info."
|
||||
|
@ -21,6 +21,11 @@ msgctxt "gdbmistringconstants.gdbmibreakpointerroronruncommand"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "デバッガがアプリケーション%0:s%0:s%1:s%0:s%0:sの実行/ステップ実行を試みた際にエラーが発生しました。ブレークポイントを削除しデバッグ(一時停止)を継続する場合は \"Ok\" を押し、問題を修正し、あるいは別の実行コマンドを選択してください。%0:sデバッグセッションを終了する場合は \"停止\" を押してください。"
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgctxt "gdbmistringconstants.gdbmicommandstartmainbreakerror"
|
||||
|
@ -22,6 +22,11 @@ msgctxt "gdbmistringconstants.gdbmibreakpointerroronruncommand"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "Derintuvei vykdant programą ar darant joje žingsnį įvyko klaida:%0:s%0:s%1:s%0:s%0:sPaspaudus „Tinka“ bus pašalinti stabdos taškai ir tęsiamas derinimas (pristabdytas), tai leis pašalinti problemą arba pasirinkti alternatyvią vykdymo komandą.%0:sPaspaudus „Stabdyti“ derinimo seansas bus baigtas."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgctxt "gdbmistringconstants.gdbmicommandstartmainbreakerror"
|
||||
|
@ -10,6 +10,11 @@ msgstr ""
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgid "The debugger could not set a breakpoint on the application's entry point.%0:sThis may be caused by missing debug info."
|
||||
|
@ -21,6 +21,11 @@ msgctxt "gdbmistringconstants.gdbmibreakpointerroronruncommand"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "O depurador encontrou um erro ao tentar executar/passo a passo a aplicação:%0:s%0:s%1:s%0:s%0:sPressione \"Ok\" para remover os pontos de parada e continuar depurando (pausado), e corrigir o problema, ou escolha um comando alternativo para executar%0:sPressione \"Parar\" para encerrar a sessão de depuração."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgctxt "gdbmistringconstants.gdbmicommandstartmainbreakerror"
|
||||
|
@ -21,6 +21,11 @@ msgctxt "gdbmistringconstants.gdbmibreakpointerroronruncommand"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "Возникла ошибка отладчика при попытке запустить/сделать шаг в приложении:%0:s%0:s%1:s%0:s%0:sНажмите \"ОК\" для удаления точек останова и продолжения отладки (приостановлена), и затем исправьте проблему, или выберите другую команду запуска.%0:sНажмите \"Остановить\", чтобы закончить отладку."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgctxt "gdbmistringconstants.gdbmicommandstartmainbreakerror"
|
||||
|
@ -20,6 +20,11 @@ msgstr "Hata ayıklayıcı"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "Hata ayıklayıcı, uygulamayı çalıştırmaya / adımlandırmaya çalışırken bir hatayla karşılaştı:%0:s%0:s%1:s%0:s%0:s Kesme noktalarını kaldırmak ve hata ayıklamaya devam etmek (duraklatıldı) ve \"Tamam\" tuşuna basın. sorunu düzeltin veya alternatif bir çalıştırma komutu seçin.%0:s Hata ayıklama oturumunu sonlandırmak için \"Durdur\" düğmesine basın."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgid "The debugger could not set a breakpoint on the application's entry point.%0:sThis may be caused by missing debug info."
|
||||
|
@ -22,6 +22,11 @@ msgctxt "gdbmistringconstants.gdbmibreakpointerroronruncommand"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "Зневаджувач зазнав помилки під час спроби запуску/проходу програми:%0:s%0:s%1:s%0:s%0:sНатисніть \"Гаразд\", щоб видалити точки зупинки і продовжити зневаджування (пауза), і виправити проблему, або виберіть альтернативну команду запуску.%0:sНатисніть \"Закінчити\" для закінчення сеансу зневаджування."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgctxt "gdbmistringconstants.gdbmicommandstartmainbreakerror"
|
||||
|
@ -21,6 +21,11 @@ msgstr "调试器"
|
||||
msgid "The debugger encountered an error when trying to run/step the application:%0:s%0:s%1:s%0:s%0:sPress \"Ok\" to remove the breakpoints and continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
|
||||
msgstr "调试器遇到一个错误 在尝试运行/停止应用程序时:%0:s%0:s%1:s%0:s%0:s按\"Ok\"移除断点并继续调试(暂停),改正错误,或选择一个其他的运行命令.%0:s按\"Stop\"结束调试会话."
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartapplicationerror
|
||||
#, object-pascal-format
|
||||
msgid "The application could not be started:%0:s%1s"
|
||||
msgstr ""
|
||||
|
||||
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
|
||||
#, object-pascal-format
|
||||
msgid "The debugger could not set a breakpoint on the application's entry point.%0:sThis may be caused by missing debug info."
|
||||
|
@ -83,8 +83,9 @@ procedure TDebuggerGeneralOptionsFrame.FetchDebuggerGeneralOptions;
|
||||
begin
|
||||
// IMPORTANT if more items are added the indexes must be updated here!
|
||||
gcbDebuggerGeneralOptions.Checked[0] := EnvironmentOptions.DebuggerShowStopMessage;
|
||||
gcbDebuggerGeneralOptions.Checked[1] := EnvironmentOptions.DebuggerResetAfterRun;
|
||||
gcbDebuggerGeneralOptions.Checked[2] := EnvironmentOptions.DebuggerAutoCloseAsm;
|
||||
gcbDebuggerGeneralOptions.Checked[1] := EnvironmentOptions.DebuggerShowExitCodeMessage;
|
||||
gcbDebuggerGeneralOptions.Checked[2] := EnvironmentOptions.DebuggerResetAfterRun;
|
||||
gcbDebuggerGeneralOptions.Checked[3] := EnvironmentOptions.DebuggerAutoCloseAsm;
|
||||
txtAdditionalPath.Text:=EnvironmentOptions.GetParsedDebuggerSearchPath;
|
||||
end;
|
||||
|
||||
@ -103,6 +104,7 @@ begin
|
||||
gbAdditionalSearchPath.Caption := lisDebugOptionsFrmAdditionalSearchPath;
|
||||
gcbDebuggerGeneralOptions.Caption := lisDebugOptionsFrmDebuggerGeneralOptions;
|
||||
gcbDebuggerGeneralOptions.Items.Add(lisDebugOptionsFrmShowMessageOnStop);
|
||||
gcbDebuggerGeneralOptions.Items.Add(lisDebugOptionsFrmShowExitCodeOnStop);
|
||||
gcbDebuggerGeneralOptions.Items.Add(lisDebugOptionsFrmResetDebuggerOnEachRun);
|
||||
gcbDebuggerGeneralOptions.Items.Add(lisDebugOptionsFrmAutoCloseAsm);
|
||||
end;
|
||||
@ -123,9 +125,10 @@ begin
|
||||
begin
|
||||
DebuggerSearchPath := TrimSearchPath(txtAdditionalPath.Text,'');
|
||||
// IMPORTANT if more items are added the indexes must be updated here!
|
||||
DebuggerShowStopMessage := gcbDebuggerGeneralOptions.Checked[0];
|
||||
DebuggerResetAfterRun := gcbDebuggerGeneralOptions.Checked[1];
|
||||
DebuggerAutoCloseAsm := gcbDebuggerGeneralOptions.Checked[2];
|
||||
DebuggerShowStopMessage := gcbDebuggerGeneralOptions.Checked[0];
|
||||
DebuggerShowExitCodeMessage := gcbDebuggerGeneralOptions.Checked[1];
|
||||
DebuggerResetAfterRun := gcbDebuggerGeneralOptions.Checked[2];
|
||||
DebuggerAutoCloseAsm := gcbDebuggerGeneralOptions.Checked[3];
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -1444,13 +1444,29 @@ begin
|
||||
if (OldState<>dsIdle)
|
||||
then begin
|
||||
MainIDE.DoCallRunFinishedHandler;
|
||||
if EnvironmentOptions.DebuggerShowStopMessage
|
||||
then begin
|
||||
MsgResult:=IDEQuestionDialog(lisExecutionStopped, lisExecutionStopped,
|
||||
mtInformation, [mrOK, lisMenuOk,
|
||||
mrYesToAll, lisDoNotShowThisMessageAgain], '');
|
||||
if MsgResult=mrYesToAll then
|
||||
EnvironmentOptions.DebuggerShowStopMessage:=false;
|
||||
if not FDebugger.SkipStopMessage then begin
|
||||
if (FDebugger.ExitCode <> 0) and EnvironmentOptions.DebuggerShowExitCodeMessage then begin
|
||||
i := 4;
|
||||
if FDebugger.ExitCode > 65535 then
|
||||
i := 8;
|
||||
{$PUSH}{$R-}
|
||||
MsgResult:=IDEQuestionDialog(lisExecutionStopped,
|
||||
Format(lisExecutionStoppedExitCode, [LineEnding+'', FDebugger.ExitCode, IntToHex(FDebugger.ExitCode, i)]),
|
||||
mtInformation, [mrOK, lisMenuOk,
|
||||
mrYesToAll, lisDoNotShowThisMessageAgain], '');
|
||||
{$POP}
|
||||
if MsgResult=mrYesToAll then
|
||||
EnvironmentOptions.DebuggerShowExitCodeMessage:=false;
|
||||
end
|
||||
else
|
||||
if EnvironmentOptions.DebuggerShowStopMessage
|
||||
then begin
|
||||
MsgResult:=IDEQuestionDialog(lisExecutionStopped, lisExecutionStopped,
|
||||
mtInformation, [mrOK, lisMenuOk,
|
||||
mrYesToAll, lisDoNotShowThisMessageAgain], '');
|
||||
if MsgResult=mrYesToAll then
|
||||
EnvironmentOptions.DebuggerShowStopMessage:=false;
|
||||
end;
|
||||
end;
|
||||
|
||||
if EnvironmentOptions.DebuggerResetAfterRun or FDebugger.NeedReset then
|
||||
@ -2085,6 +2101,10 @@ begin
|
||||
if FDebugger <> nil then begin
|
||||
AvailCommands := FDebugger.Commands;
|
||||
CurState := FDebugger.State;
|
||||
if CurState = dsError then begin
|
||||
CurState := dsStop;
|
||||
AvailCommands := GetDebuggerClass.SupportedCommandsFor(dsStop);
|
||||
end;
|
||||
end
|
||||
else begin
|
||||
AvailCommands := GetDebuggerClass.SupportedCommandsFor(dsStop);
|
||||
|
@ -542,6 +542,7 @@ type
|
||||
XML_PATH_DEBUGGER_CONF_OLD = 'EnvironmentOptions/Debugger/Class%s/%s/';
|
||||
private
|
||||
FCurrentDebuggerPropertiesConfig: TDebuggerPropertiesConfig;
|
||||
FDebuggerShowExitCodeMessage: boolean;
|
||||
FHasActiveDebuggerEntry: Boolean;
|
||||
fRegisteredSubConfig: TObjectList;
|
||||
FDebuggerAutoCloseAsm: boolean;
|
||||
@ -904,6 +905,7 @@ type
|
||||
property DebuggerFileHistory[AnIndex: String]: TStringList read GetNamedDebuggerFileHistory;
|
||||
property DebuggerSearchPath: string read GetDebuggerSearchPath write SetDebuggerSearchPath;
|
||||
property DebuggerShowStopMessage: boolean read FDebuggerShowStopMessage write FDebuggerShowStopMessage;
|
||||
property DebuggerShowExitCodeMessage: boolean read FDebuggerShowExitCodeMessage write FDebuggerShowExitCodeMessage;
|
||||
property DebuggerResetAfterRun: boolean read FDebuggerResetAfterRun write FDebuggerResetAfterRun;
|
||||
property DebuggerAutoCloseAsm: boolean read FDebuggerAutoCloseAsm write FDebuggerAutoCloseAsm;
|
||||
property FppkgConfigFile: string read GetFppkgConfigFile write SetFppkgConfigFile;
|
||||
@ -2464,6 +2466,7 @@ begin
|
||||
DebuggerSearchPath:=FXMLCfg.GetValue(Path+'DebuggerSearchPath/Value','');
|
||||
// Debugger General Options
|
||||
DebuggerShowStopMessage:=FXMLCfg.GetValue(Path+'DebuggerOptions/ShowStopMessage/Value', True);
|
||||
DebuggerShowExitCodeMessage:=FXMLCfg.GetValue(Path+'DebuggerOptions/DebuggerShowExitCodeMessage/Value', True);
|
||||
DebuggerResetAfterRun :=FXMLCfg.GetValue(Path+'DebuggerOptions/DebuggerResetAfterRun/Value', False);
|
||||
FDebuggerAutoCloseAsm :=FXMLCfg.GetValue(Path+'DebuggerOptions/DebuggerAutoCloseAsm/Value', False);
|
||||
FDebuggerEventLogClearOnRun := FXMLCfg.GetValue(Path+'Debugger/EventLogClearOnRun', True);
|
||||
@ -2855,6 +2858,8 @@ begin
|
||||
SaveDebuggerPropertiesList;
|
||||
FXMLCfg.SetDeleteValue(Path+'DebuggerOptions/ShowStopMessage/Value',
|
||||
FDebuggerShowStopMessage, True);
|
||||
FXMLCfg.SetDeleteValue(Path+'DebuggerOptions/DebuggerShowExitCodeMessage/Value',
|
||||
FDebuggerShowExitCodeMessage, True);
|
||||
FXMLCfg.SetDeleteValue(Path+'DebuggerOptions/DebuggerResetAfterRun/Value',
|
||||
FDebuggerResetAfterRun, False);
|
||||
FXMLCfg.SetDeleteValue(Path+'DebuggerOptions/DebuggerAutoCloseAsm/Value',
|
||||
|
@ -4175,6 +4175,7 @@ resourcestring
|
||||
+'%sSave your work now !'
|
||||
+'%sHit Stop, and hope the best, we''re pulling the plug.';
|
||||
lisExecutionStopped = 'Execution stopped';
|
||||
lisExecutionStoppedExitCode = 'Execution stopped with exit-code %1:d ($%2:s)';
|
||||
lisFileNotFound = 'File not found';
|
||||
lisDisableOptionXg = 'Disable Option -Xg?';
|
||||
lisTheProjectWritesTheDebugSymbolsToAnExternalFileThe = 'The project writes '
|
||||
@ -5399,6 +5400,7 @@ resourcestring
|
||||
lisDebugOptionsFrmAdditionalSearchPath = 'Additional search path';
|
||||
lisDebugOptionsFrmDebuggerGeneralOptions = 'Debugger general options';
|
||||
lisDebugOptionsFrmShowMessageOnStop = 'Show message on stop';
|
||||
lisDebugOptionsFrmShowExitCodeOnStop = 'Show message on stop with Error (Exit-code <> 0)';
|
||||
lisDebugOptionsFrmResetDebuggerOnEachRun = 'Reset Debugger after each run';
|
||||
lisDebugOptionsFrmAutoCloseAsm = 'Automatically close the assembler window, after source not found';
|
||||
lisDebugOptionsFrmDebuggerSpecific = 'Debugger specific options (depends on '
|
||||
|
Loading…
Reference in New Issue
Block a user