Debugger: Fixes To TWatchResultData / introduced 2d0c2ea8ba

This commit is contained in:
Martin 2022-08-05 12:33:02 +02:00
parent f0d0b24add
commit 683d087e36
2 changed files with 15 additions and 10 deletions

View File

@ -64,7 +64,8 @@ begin
Result := ValConfig.Converter; Result := ValConfig.Converter;
if Result <> nil then if Result <> nil then
Result.AddReference; Result.AddReference;
end; end
else
if (ValConvList <> nil) then begin if (ValConvList <> nil) then begin
ValConvList.Lock; ValConvList.Lock;
try try
@ -136,12 +137,16 @@ begin
if FExtraDephtLevelItemConv = nil then if FExtraDephtLevelItemConv = nil then
FExtraDephtLevelItemConv := GetValConv(AnFpValue); FExtraDephtLevelItemConv := GetValConv(AnFpValue);
CurConv := FExtraDephtLevelItemConv; CurConv := FExtraDephtLevelItemConv;
if CurConv <> nil then
CurConv.AddReference;
end end
else else
if (RecurseCnt = 1) and (FLevelZeroKind = skArray) then begin if (RecurseCnt = 1) and (FLevelZeroKind = skArray) then begin
if FLevelZeroArrayConv = nil then if FLevelZeroArrayConv = nil then
FLevelZeroArrayConv := GetValConv(AnFpValue); FLevelZeroArrayConv := GetValConv(AnFpValue);
CurConv := FLevelZeroArrayConv; CurConv := FLevelZeroArrayConv;
if CurConv <> nil then
CurConv.AddReference;
end end
else begin else begin
CurConv := GetValConv(AnFpValue); CurConv := GetValConv(AnFpValue);
@ -149,13 +154,13 @@ begin
if (CurConv <> nil) then begin if (CurConv <> nil) then begin
if (FMaxTotalConv <= 0) then if (FMaxTotalConv <= 0) then
CurConv := nil ReleaseRefAndNil(CurConv)
else else
dec(FMaxTotalConv); dec(FMaxTotalConv);
if FInArray then begin if FInArray then begin
if (FCurMaxArrayConv <= 0) then if (FCurMaxArrayConv <= 0) then
CurConv := nil ReleaseRefAndNil(CurConv)
else else
dec(FCurMaxArrayConv); dec(FCurMaxArrayConv);
end; end;
@ -182,10 +187,7 @@ begin
AnResData := AnResData.AddField('', dfvUnknown, []); AnResData := AnResData.AddField('', dfvUnknown, []);
end; end;
finally finally
if (CurConv <> FExtraDephtLevelItemConv) and CurConv.ReleaseReference;
(CurConv <> FLevelZeroArrayConv)
then
CurConv.ReleaseReference;
NewFpVal.ReleaseReference; NewFpVal.ReleaseReference;
end; end;
end; end;

View File

@ -2297,12 +2297,14 @@ end;
procedure TWatchResultTypeConverted.AfterAssign(ATypeOnly: Boolean); procedure TWatchResultTypeConverted.AfterAssign(ATypeOnly: Boolean);
begin begin
inherited AfterAssign(ATypeOnly);
if FHandler <> nil then if FHandler <> nil then
FHandler.AddReference; FHandler.AddReference;
end; end;
procedure TWatchResultTypeConverted.DoFree; procedure TWatchResultTypeConverted.DoFree;
begin begin
inherited DoFree;
if FHandler <> nil then if FHandler <> nil then
FHandler.ReleaseReference; FHandler.ReleaseReference;
end; end;
@ -4556,7 +4558,7 @@ function TGenericWatchResultDataStructWithAnchestor.MaybeUpdateProto(
ARecurse: boolean; ASkipStorage: boolean): boolean; ARecurse: boolean; ASkipStorage: boolean): boolean;
var var
AStructProtoData: TGenericWatchResultDataStructWithAnchestor absolute AProtoData; AStructProtoData: TGenericWatchResultDataStructWithAnchestor absolute AProtoData;
FieldStore: PNestedFieldsWatchResultStorage absolute AStorage; FieldStore: PNestedFieldsAndAnchestorWatchResultStorage absolute AStorage;
dummy: TOverrideTemplateData; dummy: TOverrideTemplateData;
begin begin
Result := inherited MaybeUpdateProto(AProtoData, AnOverrideTemplate, AStorage, ARecurse, ASkipStorage); Result := inherited MaybeUpdateProto(AProtoData, AnOverrideTemplate, AStorage, ARecurse, ASkipStorage);
@ -4569,7 +4571,7 @@ begin
AStructProtoData.FType.FAnchestor := FType.FAnchestor.CreateCopy(True); AStructProtoData.FType.FAnchestor := FType.FAnchestor.CreateCopy(True);
assert((AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsWatchResultStorage), 'TGenericWatchResultDataStruct.MaybeUpdateProto: (AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsWatchResultStorage)'); assert((AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsAndAnchestorWatchResultStorage), 'TGenericWatchResultDataStruct.MaybeUpdateProto: (AStorage=nil) or (AStorage^=nil) or (AStorage^ is TNestedFieldsWatchResultStorage)');
if (AStorage = nil) or (AStorage^ = nil) if (AStorage = nil) or (AStorage^ = nil)
then begin then begin
if (ARecurse) then begin // or "if not ASkipStorage and " ?? if (ARecurse) then begin // or "if not ASkipStorage and " ??
@ -4705,7 +4707,8 @@ constructor TWatchResultDataConverted.Create(
AHandler: TLazDbgValueConverterIntf); AHandler: TLazDbgValueConverterIntf);
begin begin
FType.FHandler := AHandler; FType.FHandler := AHandler;
AHandler.AddReference; if AHandler <> nil then
AHandler.AddReference;
end; end;
{ TGenericWatchResultDataProc } { TGenericWatchResultDataProc }