* Ignore debugger errors when creating locals

git-svn-id: trunk@13742 -
This commit is contained in:
marc 2008-01-13 19:21:26 +00:00
parent 73343131f6
commit 273bdea671

View File

@ -2620,22 +2620,28 @@ begin
// args // args
TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-arguments 1 %0:d %0:d', TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-arguments 1 %0:d %0:d',
[TGDBMIDebugger(Debugger).FCurrentStackFrame], [], R); [TGDBMIDebugger(Debugger).FCurrentStackFrame], [cfIgnoreError], R);
List := CreateMIValueList(R); if R.State <> dsError
S := List.Values['stack-args']; then begin
FreeAndNil(List); List := CreateMIValueList(R);
List := CreateMIValueList(S); S := List.Values['stack-args'];
S := List.Values['frame']; FreeAndNil(List);
FreeAndNil(List); List := CreateMIValueList(S);
List := CreateMIValueList(S); S := List.Values['frame'];
AddLocals(List.Values['args']); FreeAndNil(List);
FreeAndNil(List); List := CreateMIValueList(S);
AddLocals(List.Values['args']);
FreeAndNil(List);
end;
// variables // variables
TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-locals 1', [], R); TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-locals 1', [cfIgnoreError], R);
List := CreateMIValueList(R); if R.State <> dsError
AddLocals(List.Values['locals']); then begin
FreeAndNil(List); List := CreateMIValueList(R);
AddLocals(List.Values['locals']);
FreeAndNil(List);
end;
FLocalsValid := True; FLocalsValid := True;
end; end;
@ -2784,51 +2790,58 @@ begin
if Debugger = nil then Exit; if Debugger = nil then Exit;
Arguments := TStringList.Create; Arguments := TStringList.Create;
TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-arguments 1 %d %d', TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-arguments 1 %0:d %0:d',
[AIndex, AIndex], [cfIgnoreError], R); [AIndex], [cfIgnoreError], R);
// TODO: check what to display on error // TODO: check what to display on error
List := CreateMIValueList(R); if R.State <> dsError
S := List.Values['stack-args']; then begin
FreeAndNil(List); List := CreateMIValueList(R);
List := CreateMIValueList(S); S := List.Values['stack-args'];
S := List.Values['frame']; // all arguments FreeAndNil(List);
FreeAndNil(List); List := CreateMIValueList(S);
List := CreateMIValueList(S); S := List.Values['frame']; // all arguments
S := List.Values['args']; FreeAndNil(List);
FreeAndNil(List); List := CreateMIValueList(S);
S := List.Values['args'];
FreeAndNil(List);
ArgList := CreateMIValueList(S);
for n := 0 to ArgList.Count - 1 do
begin
List := CreateMIValueList(ArgList[n]);
Arguments.Add(List.Values['name'] + '=' + List.Values['value']);
FreeAndNil(List);
end;
FreeAndNil(ArgList);
end;
ArgList := CreateMIValueList(S); TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-frames %0:d %0:d',
for n := 0 to ArgList.Count - 1 do [AIndex], [cfIgnoreError], R);
begin if R.State <> dsError
List := CreateMIValueList(ArgList[n]); then begin
Arguments.Add(List.Values['name'] + '=' + List.Values['value']); List := CreateMIValueList(R);
S := List.Values['stack'];
FreeAndNil(List);
List := CreateMIValueList(S);
S := List.Values['frame'];
FreeAndNil(List);
List := CreateMIValueList(S);
addr := 0;
Val(List.Values['addr'], addr, e);
if e=0 then ;
Result := TCallStackEntry.Create(
AIndex,
addr,
Arguments,
List.Values['func'],
List.Values['file'],
StrToIntDef(List.Values['line'], 0)
);
FreeAndNil(List); FreeAndNil(List);
end; end;
FreeAndNil(ArgList);
TGDBMIDebugger(Debugger).ExecuteCommand('-stack-list-frames %d %d',
[AIndex, AIndex], [], R);
List := CreateMIValueList(R);
S := List.Values['stack'];
FreeAndNil(List);
List := CreateMIValueList(S);
S := List.Values['frame'];
FreeAndNil(List);
List := CreateMIValueList(S);
addr := 0;
Val(List.Values['addr'], addr, e);
if e=0 then ;
Result := TCallStackEntry.Create(
AIndex,
addr,
Arguments,
List.Values['func'],
List.Values['file'],
StrToIntDef(List.Values['line'], 0)
);
FreeAndNil(List);
Arguments.Free; Arguments.Free;
end; end;