mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 21:41:01 +02:00
DBG: Fix occasional missing hex dump in disassembler
git-svn-id: trunk@31176 -
This commit is contained in:
parent
b536ad8ffa
commit
0479ee769d
@ -2846,6 +2846,41 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean;
|
|||||||
StopAfterAddress: TDBGPtr; StopAfterNumLines: Integer
|
StopAfterAddress: TDBGPtr; StopAfterNumLines: Integer
|
||||||
): Boolean;
|
): Boolean;
|
||||||
|
|
||||||
|
procedure AddRangetoMemDumpsNeeded(NewRange: TDBGDisassemblerEntryRange);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
i := length(FMemDumpsNeeded);
|
||||||
|
if (i > 0)
|
||||||
|
then begin
|
||||||
|
if (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].FirstAddr)
|
||||||
|
and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].FirstAddr)
|
||||||
|
then FMemDumpsNeeded[0].FirstAddr := NewRange.RangeStartAddr
|
||||||
|
else
|
||||||
|
if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].LastAddr)
|
||||||
|
and (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].LastAddr)
|
||||||
|
then FMemDumpsNeeded[0].LastAddr := NewRange.LastEntryEndAddr + 1
|
||||||
|
else
|
||||||
|
if (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].FirstAddr)
|
||||||
|
and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].FirstAddr)
|
||||||
|
then FMemDumpsNeeded[i-1].FirstAddr := NewRange.RangeStartAddr
|
||||||
|
else
|
||||||
|
if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].LastAddr)
|
||||||
|
and (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].LastAddr)
|
||||||
|
then FMemDumpsNeeded[i-1].LastAddr := NewRange.LastEntryEndAddr + 1
|
||||||
|
else begin
|
||||||
|
SetLength(FMemDumpsNeeded, i + 1);
|
||||||
|
FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr;
|
||||||
|
FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
SetLength(FMemDumpsNeeded, i + 1);
|
||||||
|
FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr;
|
||||||
|
FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure DoDisassembleSourceless(ASubFirstAddr, ASubLastAddr: TDBGPtr;
|
procedure DoDisassembleSourceless(ASubFirstAddr, ASubLastAddr: TDBGPtr;
|
||||||
ARange: TDBGDisassemblerEntryRange; SkipFirstAddresses: Boolean = False);
|
ARange: TDBGDisassemblerEntryRange; SkipFirstAddresses: Boolean = False);
|
||||||
var
|
var
|
||||||
@ -3000,6 +3035,7 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean;
|
|||||||
if not ContinueAfterSource
|
if not ContinueAfterSource
|
||||||
then begin
|
then begin
|
||||||
AdjustLastEntryEndAddr(NewRange, DisAssList);
|
AdjustLastEntryEndAddr(NewRange, DisAssList);
|
||||||
|
AddRangetoMemDumpsNeeded(NewRange);
|
||||||
FKnownRanges.AddRange(NewRange); // NewRange is now owned by FKnownRanges
|
FKnownRanges.AddRange(NewRange); // NewRange is now owned by FKnownRanges
|
||||||
NewRange := nil;
|
NewRange := nil;
|
||||||
FreeAndNil(DisAssList);
|
FreeAndNil(DisAssList);
|
||||||
@ -3178,36 +3214,7 @@ function TGDBMIDebuggerCommandDisassembe.DoExecute: Boolean;
|
|||||||
if NewRange.LastEntryEndAddr > NewRange.RangeEndAddr
|
if NewRange.LastEntryEndAddr > NewRange.RangeEndAddr
|
||||||
then NewRange.RangeEndAddr := NewRange.LastEntryEndAddr;
|
then NewRange.RangeEndAddr := NewRange.LastEntryEndAddr;
|
||||||
|
|
||||||
i := length(FMemDumpsNeeded);
|
AddRangetoMemDumpsNeeded(NewRange);
|
||||||
if (i > 0)
|
|
||||||
then begin
|
|
||||||
if (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].FirstAddr)
|
|
||||||
and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].FirstAddr)
|
|
||||||
then FMemDumpsNeeded[0].FirstAddr := NewRange.RangeStartAddr
|
|
||||||
else
|
|
||||||
if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[0].LastAddr)
|
|
||||||
and (NewRange.RangeStartAddr <= FMemDumpsNeeded[0].LastAddr)
|
|
||||||
then FMemDumpsNeeded[0].LastAddr := NewRange.LastEntryEndAddr + 1
|
|
||||||
else
|
|
||||||
if (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].FirstAddr)
|
|
||||||
and (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].FirstAddr)
|
|
||||||
then FMemDumpsNeeded[i-1].FirstAddr := NewRange.RangeStartAddr
|
|
||||||
else
|
|
||||||
if (NewRange.LastEntryEndAddr + 1 >= FMemDumpsNeeded[i-1].LastAddr)
|
|
||||||
and (NewRange.RangeStartAddr <= FMemDumpsNeeded[i-1].LastAddr)
|
|
||||||
then FMemDumpsNeeded[i-1].LastAddr := NewRange.LastEntryEndAddr + 1
|
|
||||||
else begin
|
|
||||||
SetLength(FMemDumpsNeeded, i + 1);
|
|
||||||
FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr;
|
|
||||||
FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1;
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
SetLength(FMemDumpsNeeded, i + 1);
|
|
||||||
FMemDumpsNeeded[i].FirstAddr := NewRange.RangeStartAddr;
|
|
||||||
FMemDumpsNeeded[i].LastAddr := NewRange.LastEntryEndAddr + 1;
|
|
||||||
end;
|
|
||||||
|
|
||||||
FKnownRanges.AddRange(NewRange); // NewRange is now owned by FKnownRanges
|
FKnownRanges.AddRange(NewRange); // NewRange is now owned by FKnownRanges
|
||||||
NewRange := nil;
|
NewRange := nil;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user