Merged revision(s) 47377-47378 #c9ba4326e2-#c9ba4326e2, 47382-47384 #78dc09170e-#78dc09170e, 47386-47388 #c276a8b998-#c276a8b998 from trunk:

r47388
PascalScript: update to origin git f3cf602541b5e73ff93d583adae3b98e314dcd6f calling constructor in 64 bit
---------------------
r47387
PascalScript: update to origin git 466ab97b370687e7053a945d0a55aef7f260e7f3
---------------------
r47386
Debugger: Add some feedback in the eval/modify dialog.
---------------------
r47384
DebuggerGDBMI: Improve getting exception message
---------------------
r47383
DebuggerGDBMI: fix handling internal breakpoints. After an exception normal run/F9 was sometimes broken due to breakpoints not cleared
---------------------
r47382
DebuggerGDBMI: fix handling internal breakpoints. After an exception normal run/F9 was sometimes broken due to breakpoints not cleared
---------------------
r47378
DebuggerGDBMI: po files
---------------------
r47377
DebuggerGDBMI: improve checks if gdb is running. Fix crash when gdb can not be launched. Issue #0027003
---------------------

git-svn-id: branches/fixes_1_4@47389 -
This commit is contained in:
martin 2015-01-14 20:20:48 +00:00
parent af19716022
commit 925c9fabbb
18 changed files with 141 additions and 55 deletions

View File

@ -4,15 +4,14 @@
{$ifndef mswindows}
{$DEFINE PS_NOIDISPATCH}
{$endif}
{.$if (fpc_version=2) and (fpc_release>=3) and (fpc_patch>=1)}
{$if (fpc_version=2) and ((fpc_release=2) and (fpc_patch>=4)) or (fpc_release>2)}
{$if (fpc_version>2) or ((fpc_version=2) and ((fpc_release=2) and (fpc_patch>=4)) or (fpc_release>2))}
{$UNDEF FPC_OLD_FIX}
{$DEFINE PS_STACKALIGN}
{$UNDEF PS_FPCSTRINGWORKAROUND}
{$DEFINE PS_RESBEFOREPARAMETERS}
{$DEFINE x64_string_result_as_varparameter}
{$ifdef mswindows}
{$if (fpc_version=2) and (fpc_release>5)}
{$if (fpc_version>2) or ((fpc_version=2) and (fpc_release>5))}
{$DEFINE PS_FPC_HAS_COM}
{$endif}
{$endif}

View File

@ -13143,6 +13143,9 @@ begin
{$ENDIF}
AddDelphiFunction('function Unassigned: Variant;');
AddDelphiFunction('function VarIsEmpty(const V: Variant): Boolean;');
{$IFDEF DELPHI7UP}
AddDelphiFunction('function VarIsClear(const V: Variant): Boolean;');
{$ENDIF}
AddDelphiFunction('function Null: Variant;');
AddDelphiFunction('function VarIsNull(const V: Variant): Boolean;');
AddDelphiFunction('function VarType(const V: Variant): TVarType;');

View File

@ -9374,6 +9374,9 @@ begin
RegisterDelphiFunction(@Unassigned, 'UNASSIGNED', cdRegister);
RegisterDelphiFunction(@VarIsEmpty, 'VARISEMPTY', cdRegister);
{$IFDEF DELPHI7UP}
RegisterDelphiFunction(@VarIsClear, 'VARISCLEAR', cdRegister);
{$ENDIF}
RegisterDelphiFunction(@Null, 'NULL', cdRegister);
RegisterDelphiFunction(@VarIsNull, 'VARISNULL', cdRegister);
{$IFNDEF FPC}
@ -9930,10 +9933,18 @@ end;
procedure CheckPackagePtr(var P: PByteArr);
begin
{$ifdef Win32}
if (word((@p[0])^) = $25FF) and (word((@p[6])^)=$C08B)then
begin
p := PPointer((@p[2])^)^;
end;
{$endif}
{$ifdef Win64}
if (word((@p[0])^) = $25FF) {and (word((@p[6])^)=$C08B)}then
begin
p := PPointer(NativeUInt(@P[0]) + Cardinal((@p[2])^) + 6{Instruction Size})^
end;
{$endif}
end;
{$IFDEF VER90}{$DEFINE NO_vmtSelfPtr}{$ENDIF}
@ -10232,7 +10243,11 @@ begin
Delete(s, 1, 1);
CurrStack := Cardinal(Stack.Count) - Cardinal(length(s)) -1;
if s[1] = #0 then inc(CurrStack);
{$IFDEF CPU64}
IntVal := CreateHeapVariant(Caller.FindType2(btS64));
{$ELSE}
IntVal := CreateHeapVariant(Caller.FindType2(btU32));
{$ENDIF}
if IntVal = nil then
begin
Result := False;
@ -10242,7 +10257,11 @@ begin
// under FPC a constructor it's called with self=0 (EAX) and
// the VMT class pointer in EDX so they are effectively swaped
// using register calling convention
{$IFDEF CPU64}
PPSVariantU32(IntVal).Data := Int64(FSelf);
{$ELSE}
PPSVariantU32(IntVal).Data := Cardinal(FSelf);
{$ENDIF}
FSelf := pointer(1);
{$ELSE}
PPSVariantU32(IntVal).Data := 1;

View File

@ -543,6 +543,7 @@ begin
if not GetPtr(rp(Params[0])) then exit; // this goes first
RegUsage := 2;
EDX := Longint(_Self);
DisposePPSVariantIFC(Params[0]);
Params.Delete(0);
end else
{$ENDIF}

View File

@ -329,26 +329,36 @@ end;
function TCmdLineDebugger.CreateDebugProcess(const AOptions: String): Boolean;
begin
Result := False;
if FDbgProcess = nil
then begin
FDbgProcess := TProcessUTF8.Create(nil);
FDbgProcess.CommandLine := ExternalDebugger + ' ' + AOptions;
// TODO: under win9x and winMe should be created with console,
// otherwise no break can be sent.
FDbgProcess.Options:= [poUsePipes, poNoConsole, poStdErrToOutPut, poNewProcessGroup];
FDbgProcess.ShowWindow := swoNone;
FDbgProcess.Environment:=DebuggerEnvironment;
try
FDbgProcess.CommandLine := ExternalDebugger + ' ' + AOptions;
// TODO: under win9x and winMe should be created with console,
// otherwise no break can be sent.
FDbgProcess.Options:= [poUsePipes, poNoConsole, poStdErrToOutPut, poNewProcessGroup];
FDbgProcess.ShowWindow := swoNone;
FDbgProcess.Environment:=DebuggerEnvironment;
except
FreeAndNil(FDbgProcess);
end;
end;
if not FDbgProcess.Running
if FDbgProcess = nil then exit;
if not FDbgProcess.Running
then begin
try
FDbgProcess.Execute;
DebugLn('[TCmdLineDebugger] Debug PID: ', IntToStr(FDbgProcess.Handle));
Result := FDbgProcess.Running;
except
on E: Exception do DebugLn('Exeption while executing debugger: ', E.Message);
on E: Exception do begin
FOutputBuf := E.Message;
DebugLn('Exeption while executing debugger: ', FOutputBuf);
end;
end;
end;
Result := FDbgProcess.Running;
end;
destructor TCmdLineDebugger.Destroy;
@ -430,6 +440,16 @@ begin
// TODO: get extra handles to wait for
// TODO: Fix multiple peeks
Result := '';
if not DebugProcessRunning then begin
if FOutputBuf <> '' then begin
Result := FOutputBuf;
FOutputBuf := '';
exit;
end;
DoReadError;
exit;
end;
FReadLineTimedOut := False;
FReadLineWasAbortedByNested := False;
if FReadLineCallStamp = high(FReadLineCallStamp) then
@ -469,6 +489,10 @@ begin
if FReadLineTimedOut
then break;
if FDbgProcess.Output = nil then begin
DoReadError;
break;
end;
WaitSet := WaitForHandles([FDbgProcess.Output.Handle], ATimeOut);
@ -490,7 +514,7 @@ begin
end;
if ((WaitSet and 1) <> 0)
and (FDbgProcess <> nil)
and DebugProcessRunning
and (ReadData(FDbgProcess.Output, FOutputBuf) > 0)
then Continue; // start lineend search

View File

@ -5592,6 +5592,15 @@ function TGDBMIDebuggerCommandExecute.ProcessStopped(const AParams: String;
if tfExceptionIsPointer in TargetInfo^.TargetFlags
then ExceptionMessage := GetText('Exception(%s).FMessage', [ExceptInfo.ObjAddr])
else ExceptionMessage := GetText('^Exception(%s)^.FMessage', [ExceptInfo.ObjAddr]);
if FLastExecResult.State = dsError then begin
if tfExceptionIsPointer in TargetInfo^.TargetFlags then begin
ExceptionMessage := GetText('^Exception(%s).FMessage', [ExceptInfo.ObjAddr]);
if FLastExecResult.State <> dsError then
Exclude(TargetInfo^.TargetFlags, tfExceptionIsPointer);
end;
if FLastExecResult.State = dsError then
ExceptionMessage := GetText('^^char(^%s(%s)+1)^', [PointerTypeCast, ExceptInfo.ObjAddr]);
end;
//ExceptionMessage := GetText('^^Exception($fp+8)^^.FMessage', []);
end else begin
// Only works if Exception class is not changed. FMessage must be first member
@ -8622,10 +8631,8 @@ begin
end;
end
else begin
if DebugProcess = nil
then MessageDlg('Debugger', 'Failed to create debug process for unknown reason', mtError, [mbOK], 0)
else MessageDlg('Debugger', Format('Failed to create debug process: %s', [ReadLine(50)]), mtError, [mbOK], 0);
SetState(dsError);
include(FErrorHandlingFlags, ehfDeferReadWriteError);
SetErrorState(gdbmiFailedToLaunchExternalDbg, ReadLine(50));
end;
FGDBPtrSize := CpuNameToPtrSize(FGDBCPU); // will be set in StartDebugging
@ -10900,6 +10907,7 @@ begin
if not ExecuteCommand('x/s ' + AExpression, AValues, R, [],
DebuggerProperties.TimeoutForEval)
then begin
FLastExecResult.State := dsError;
Result := '';
Exit;
end;
@ -10913,6 +10921,7 @@ var
begin
if not ExecuteCommand('x/c ' + AExpression, AValues, R)
then begin
FLastExecResult.State := dsError;
Result := '';
Exit;
end;
@ -11398,6 +11407,7 @@ begin
ACmd.ExecuteCommand('-break-delete %d', [FNameBreakID], [cfCheckError]);
FNameBreakID := -1;
FNameBreakAddr := 0;
FEnabled := FEnabled and ((FNameBreakID >= 0) or (FAddrBreakID >= 0) or (FCustomID >= 0) or (FLineOffsID >= 0));
end;
procedure TGDBMIInternalBreakPoint.ClearAddr(ACmd: TGDBMIDebuggerCommand);
@ -11407,6 +11417,7 @@ begin
FAddrBreakID := -1;
FAddrBreakAddr := 0;
FMainAddrFound := 0;
FEnabled := FEnabled and ((FNameBreakID >= 0) or (FAddrBreakID >= 0) or (FCustomID >= 0) or (FLineOffsID >= 0));
end;
procedure TGDBMIInternalBreakPoint.ClearCustom(ACmd: TGDBMIDebuggerCommand);
@ -11415,6 +11426,7 @@ begin
ACmd.ExecuteCommand('-break-delete %d', [FCustomID], [cfCheckError]);
FCustomID := -1;
FCustomAddr := 0;
FEnabled := FEnabled and ((FNameBreakID >= 0) or (FAddrBreakID >= 0) or (FCustomID >= 0) or (FLineOffsID >= 0));
end;
procedure TGDBMIInternalBreakPoint.ClearLineOffs(ACmd: TGDBMIDebuggerCommand);
@ -11424,6 +11436,7 @@ begin
FLineOffsID := -1;
FLineOffsAddr := 0;
FLineOffsFunction := '';
FEnabled := FEnabled and ((FNameBreakID >= 0) or (FAddrBreakID >= 0) or (FCustomID >= 0) or (FLineOffsID >= 0));
end;
function TGDBMIInternalBreakPoint.BreakSet(ACmd: TGDBMIDebuggerCommand; ALoc: String; out
@ -11455,6 +11468,7 @@ begin
ACmd.ExecuteCommand('-break-insert %s', [ALoc], R);
Result := R.State <> dsError;
if not Result then exit;
FEnabled := True;
ResultList := TGDBMINameValueList.Create(R, ['bkpt']);
AId := StrToIntDef(ResultList.Values['number'], -1);
@ -11512,7 +11526,7 @@ begin
FLineOffsAddr := 0;
FUseForceFlag := False;
FName := AName;
FEnabled := True;
FEnabled := False;
end;
(* Using -insert-break with a function name allows GDB to adjust the address
@ -11596,6 +11610,7 @@ begin
ClearAddr(ACmd);
ClearCustom(ACmd);
ClearLineOffs(ACmd);
FEnabled := False;
end;
function TGDBMIInternalBreakPoint.ClearId(ACmd: TGDBMIDebuggerCommand; AnId: Integer): Boolean;
@ -11644,7 +11659,7 @@ var
R: TGDBMIExecResult;
begin
if FEnabled then exit;
FEnabled := True;
FEnabled := (FNameBreakID >= 0) or (FAddrBreakID >= 0) or (FCustomID >= 0) or (FLineOffsID >= 0);
if FNameBreakID >= 0 then
ACmd.ExecuteCommand('-break-enable %d', [FNameBreakID], R);

View File

@ -60,6 +60,7 @@ resourcestring
gdbmiEventLogDebugOutput = 'Debug Output: %s';
gdbmiEventLogProcessExitNormally = 'Process Exit: normally';
gdbmiEventLogProcessExitCode = 'Process Exit: %s';
gdbmiFailedToLaunchExternalDbg = 'Failed to create process for GDB';
gdbmiFailedToTerminateGDBTitle = 'GDB did not terminate';
gdbmiFailedToTerminateGDB = 'The IDE was unable to terminate the GDB process. '
+ 'This process may be left running outside the control of IDE.%0:s'

View File

@ -110,6 +110,10 @@ msgctxt "gdbmistringconstants.gdbmieventlogprocessstart"
msgid "Process Start: %s"
msgstr ""
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgctxt "gdbmistringconstants.gdbmifailedtoterminategdb"
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."

View File

@ -109,6 +109,10 @@ msgctxt "gdbmistringconstants.gdbmieventlogprocessstart"
msgid "Process Start: %s"
msgstr "Folyamat indítása: %s"
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgctxt "gdbmistringconstants.gdbmifailedtoterminategdb"
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."
@ -165,3 +169,4 @@ msgstr "Válasz: %sFolytatás?"
#: gdbmistringconstants.lisunexpectedresultthedebuggerwillterminate
msgid "Unexpected result:%sThe debugger will terminate"
msgstr "Váratlan eredmény:%sA hibakereső leállni"

View File

@ -23,30 +23,19 @@ msgstr "Il debugger ha incontrato un errore nel cercare di eseguire l'applicazio
#: gdbmistringconstants.gdbmicommandstartmainbreakerror
msgid "The debugger could not set a breakpoint on the application's entry point.%0:sThis may be caused by missing debug info."
msgstr ""
"Il debugger non ha potuto inserire un breakpoint al punto di avvio della "
"applicazione.%0:sQuesto può dipendere dalla mancanza di informazioni di "
"debug."
msgstr "Il debugger non ha potuto inserire un breakpoint al punto di avvio della applicazione.%0:sQuesto può dipendere dalla mancanza di informazioni di debug."
#: gdbmistringconstants.gdbmicommandstartmainrunerror
msgid "The debugger could not run the application.%0:sThis may be caused by missing debug info."
msgstr ""
"Il debugger non ha potuto avviare l'applicazione.%0:sQuesto può dipendere "
"dalla mancanza di informazioni di debug."
msgstr "Il debugger non ha potuto avviare l'applicazione.%0:sQuesto può dipendere dalla mancanza di informazioni di debug."
#: gdbmistringconstants.gdbmicommandstartmainrunnopiderror
msgid "The debugger failed to get the application's PID.%0:sThis may be caused by missing debug info."
msgstr ""
"Il debugger non ha trovato il PID dell'applicazione.%0:sQuesto può dipendere "
"dalla mancanza di informazioni di debug."
msgstr "Il debugger non ha trovato il PID dell'applicazione.%0:sQuesto può dipendere dalla mancanza di informazioni di debug."
#: gdbmistringconstants.gdbmicommandstartmainruntostoperror
msgid "The debugger was unable to initialize itself.%0:sThe application did run (and terminated) before the debugger could set any breakpoints. %0:sThis may be caused by missing debug info."
msgstr ""
"Il debugger non è riuscito ad inizializzarsi.%0:sL'applicazione si è "
"eseguita (ed è terminata) prima che il debugger potesse impostare i "
"breakpoints. %0:sQuesto può dipendere dalla mancanza di informazioni di "
"debug."
msgstr "Il debugger non è riuscito ad inizializzarsi.%0:sL'applicazione si è eseguita (ed è terminata) prima che il debugger potesse impostare i breakpoints. %0:sQuesto può dipendere dalla mancanza di informazioni di debug."
#: gdbmistringconstants.gdbmierroronruncommand
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 continue debugging (paused), and correct the problem, or choose an alternative run command.%0:sPress \"Stop\" to end the debug session."
@ -54,8 +43,7 @@ msgstr "Il debugger ha incontrato un errore nel cercare di eseguire l'applicazio
#: gdbmistringconstants.gdbmierroronruncommandwithwarning
msgid "%0:s%0:sIn addition to the error the following warning was encountered:%0:s%0:s%1:s"
msgstr ""
"%0:s%0:sOltre all'errore è stato incontrato il seguente avviso:%0:s%0:s%1:s"
msgstr "%0:s%0:sOltre all'errore è stato incontrato il seguente avviso:%0:s%0:s%1:s"
#: gdbmistringconstants.gdbmierrorstategenericinfo
msgid "Error in: %1:s %0:s"
@ -67,8 +55,7 @@ msgstr "%0:sIl comando GDB:%0:s\"%1:s\"%0:sha restituito l'errore:%0:s\"%2:s\"%0
#: gdbmistringconstants.gdbmierrorstateinfocommandnoresult
msgid "%0:sThe GDB command:%0:s\"%1:s\"%0:sdid not return any result.%0:s"
msgstr ""
"%0:sIl comando GDB:%0:s\"%1:s\"%0:snon ha restituito nessun risultato.%0:s"
msgstr "%0:sIl comando GDB:%0:s\"%1:s\"%0:snon ha restituito nessun risultato.%0:s"
#: gdbmistringconstants.gdbmierrorstateinfofailedread
msgid "%0:sCould not read output from GDB.%0:s"
@ -106,6 +93,10 @@ msgstr "Uscita del processo: normale"
msgid "Process Start: %s"
msgstr "Avvio del processo: %s"
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."
msgstr "l'IDE non è riuscita a terminare il processo GDB. Questo processo può rimanere attivo fuori dal controllo dell'IDE.%0:sPer evitare che il processo influisca sul vostro sistema, dovreste individuarlo e terminarlo manualmente."
@ -124,15 +115,11 @@ msgstr "GDB ha incontrato un errore interno: %0:sPremere \"Ok\" per continuare i
#: gdbmistringconstants.gdbmigdbinternalerrorinfo
msgid "While executing the command: %0:s\"%2:s\"%0:sgdb reported:%0:s\"%1:s\"%0:s"
msgstr ""
"Nell'eseguire il comando: %0:s\"%2:s\"%0:sgdb ha restituito:%0:s\"%1:s\"%0:s"
msgstr "Nell'eseguire il comando: %0:s\"%2:s\"%0:sgdb ha restituito:%0:s\"%1:s\"%0:s"
#: gdbmistringconstants.gdbmipressignoretocontinuedebuggingthismaynotbesafepres
msgid "Press \"Ignore\" to continue debugging. This may NOT be safe. Press \"Abort\" to stop the debugger.%0:sException: %1:s with message \"%2:s\"%0:sContext: %4:s. State: %5:s %0:s%0:s%3:s"
msgstr ""
"Premere \"Ignore\" per proseguire il debug. Questo potrebbe NON essere sicuro. "
"Premere \"Abort\" per fermare il debugger.%0:sErrore: %1:s con messaggio \"%"
"2:s\"%0:sContesto: %4:s. Stato: %5:s %0:s%0:s%3:s"
msgstr "Premere \"Ignore\" per proseguire il debug. Questo potrebbe NON essere sicuro. Premere \"Abort\" per fermare il debugger.%0:sErrore: %1:s con messaggio \"%2:s\"%0:sContesto: %4:s. Stato: %5:s %0:s%0:s%3:s"
#: gdbmistringconstants.gdbmithedebuggerexperiencedanunknowncondition
msgid "The debugger experienced an unknown condition"
@ -144,18 +131,11 @@ msgstr "Tempo scaduto per il comando \"%s\""
#: gdbmistringconstants.gdbmiwarningunknowbreakpoint
msgid "The debugger reached an unexpected %1:s%0:s%0:sPress \"Ok\" to continue debugging (paused).%0:sPress \"Stop\" to end the debug session."
msgstr ""
"Il debugger è giunto ad un inatteso %1:s%0:s%0:sPremere \"Ok\" per continuare "
"il debug (in pausa).%0:sPremere \"Stop\" per terminare la sessione di debug."
msgstr "Il debugger è giunto ad un inatteso %1:s%0:s%0:sPremere \"Ok\" per continuare il debug (in pausa).%0:sPremere \"Stop\" per terminare la sessione di debug."
#: gdbmistringconstants.lisnewthegnudebuggerthroughsshallowstoremotedebugviaassh
msgid "The GNU debugger through SSH allows to remote debug via a SSH connection. See docs/RemoteDebugging.txt for details. The path must contain the SSH client. Use SSH_Startup_Options for the hostname and optional username. Use Remote_GDB_Exe for the filename of GDB on the remote computer."
msgstr ""
"Il debugger GNU attraverso SSH permette il debug da remoto tramite una "
"connessione SSH. Vedere docs/RemoteDebugging.txt per dettagli. Il percorso "
"deve includere il cliente SSH. Usare SSH_Startup_Options per il nome host e "
"un nome utente opzionale. Usare Remote_GDB_Exe per il nome del file di GDB "
"nel computer remoto."
msgstr "Il debugger GNU attraverso SSH permette il debug da remoto tramite una connessione SSH. Vedere docs/RemoteDebugging.txt per dettagli. Il percorso deve includere il cliente SSH. Usare SSH_Startup_Options per il nome host e un nome utente opzionale. Usare Remote_GDB_Exe per il nome del file di GDB nel computer remoto."
#: gdbmistringconstants.lisresponsecontinue
msgid "Response: %sContinue ?"
@ -164,3 +144,4 @@ msgstr "Risposta: %sContinuare ?"
#: gdbmistringconstants.lisunexpectedresultthedebuggerwillterminate
msgid "Unexpected result:%sThe debugger will terminate"
msgstr "Risultato inatteso:%sIl debugger termina"

View File

@ -110,6 +110,10 @@ msgctxt "gdbmistringconstants.gdbmieventlogprocessstart"
msgid "Process Start: %s"
msgstr "プロセス開始:%s"
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgctxt "gdbmistringconstants.gdbmifailedtoterminategdb"
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."

View File

@ -110,6 +110,10 @@ msgctxt "gdbmistringconstants.gdbmieventlogprocessstart"
msgid "Process Start: %s"
msgstr ""
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgctxt "gdbmistringconstants.gdbmifailedtoterminategdb"
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."

View File

@ -81,6 +81,10 @@ msgstr ""
msgid "Process Start: %s"
msgstr ""
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."
msgstr ""

View File

@ -115,6 +115,10 @@ msgctxt "gdbmistringconstants.gdbmieventlogprocessstart"
msgid "Process Start: %s"
msgstr "Início do Processo: %s"
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgctxt "gdbmistringconstants.gdbmifailedtoterminategdb"
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."

View File

@ -108,6 +108,10 @@ msgctxt "gdbmistringconstants.gdbmieventlogprocessstart"
msgid "Process Start: %s"
msgstr "Запуск процесса: %s"
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgctxt "gdbmistringconstants.gdbmifailedtoterminategdb"
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."

View File

@ -107,6 +107,10 @@ msgctxt "gdbmistringconstants.gdbmieventlogprocessstart"
msgid "Process Start: %s"
msgstr ""
#: gdbmistringconstants.gdbmifailedtolaunchexternaldbg
msgid "Failed to create process for GDB"
msgstr ""
#: gdbmistringconstants.gdbmifailedtoterminategdb
msgctxt "gdbmistringconstants.gdbmifailedtoterminategdb"
msgid "The IDE was unable to terminate the GDB process. This process may be left running outside the control of IDE.%0:sTo ensure the process is not affecting your System, you should locate and terminate it yourself."

View File

@ -76,6 +76,8 @@ resourcestring
drsUseInstanceClassType = 'Use Instance class type';
drsLen = 'Len=%d: ';
synfNewValueIsEmpty = '"New value" is empty';
synfTheDebuggerWasNotAbleToModifyTheValue = 'The debugger was not able to modify the value';
implementation

View File

@ -39,7 +39,7 @@ interface
uses
Classes, SysUtils, LCLType, Forms,
IDEWindowIntf, IDEImagesIntf, DbgIntfDebuggerBase, LazarusIDEStrConsts,
ComCtrls, StdCtrls, Menus, DebuggerDlg, BaseDebugManager,
ComCtrls, StdCtrls, Menus, Dialogs, DebuggerDlg, BaseDebugManager,
InputHistory, IDEProcs, Debugger, DebuggerStrConst;
type
@ -253,7 +253,11 @@ begin
S := Trim(cmbExpression.Text);
if S = '' then Exit;
V := cmbNewValue.Text;
if not DebugBoss.Modify(S, V) then Exit;
if not DebugBoss.Modify(S, V) then begin
MessageDlg(lisCCOErrorCaption, synfTheDebuggerWasNotAbleToModifyTheValue, mtError, [mbOK],
0);
Exit;
end;
if cmbNewValue.Items.IndexOf(V) = -1
then cmbNewValue.Items.Insert(0, V);
@ -326,6 +330,10 @@ end;
procedure TEvaluateDlg.tbModifyClick(Sender: TObject);
begin
if cmbNewValue.Text = '' then begin
MessageDlg(lisCCOErrorCaption, synfNewValueIsEmpty, mtError, [mbOK], 0);
exit;
end;
Modify;
end;