diff --git a/components/fpdebug/fpdbgavrclasses.pas b/components/fpdebug/fpdbgavrclasses.pas index 5a1081a94d..c3d5eebb32 100644 --- a/components/fpdebug/fpdbgavrclasses.pas +++ b/components/fpdebug/fpdbgavrclasses.pas @@ -600,11 +600,7 @@ begin FRemoteConfig.Assign(AProcessConfig); end; - // Create own memory manager to manage register address reads - // Pass through other helper classes as is - FMemManager := TAvrMemManager.Create(AMemManager.MemReader, AMemManager.TargetMemConvertor, AMemManager.SelfMemConvertor); - - inherited Create(AFileName, AnOsClasses, FMemManager); + inherited Create(AFileName, AnOsClasses, AMemManager, AProcessConfig); end; destructor TDbgAvrProcess.Destroy; @@ -613,8 +609,6 @@ begin FreeAndNil(FConnection); if Assigned(FRemoteConfig) then FreeAndNil(FRemoteConfig); - if Assigned(FMemManager) then - FreeAndNil(FMemManager); inherited Destroy; end; diff --git a/components/fpdebug/fpdbgclasses.pp b/components/fpdebug/fpdbgclasses.pp index f8133dd7c7..d6e8ea5020 100644 --- a/components/fpdebug/fpdbgclasses.pp +++ b/components/fpdebug/fpdbgclasses.pp @@ -603,6 +603,7 @@ type TDbgInstance = class(TObject) private + FMemManager: TFpDbgMemManager; FMode: TFPDMode; FFileName: String; FProcess: TDbgProcess; @@ -617,7 +618,6 @@ type function FindProcSymbol(AAdress: TDbgPtr): TFpSymbol; overload; protected FDbgInfo: TDbgInfo; - FMemManager: TFpDbgMemManager; procedure InitializeLoaders; virtual; procedure SetFileName(const AValue: String); procedure SetMode(AMode: TFPDMode); experimental; // for testcase diff --git a/components/fpdebug/fpdbgdwarfdataclasses.pas b/components/fpdebug/fpdbgdwarfdataclasses.pas index d08c999a4f..42390917ae 100644 --- a/components/fpdebug/fpdbgdwarfdataclasses.pas +++ b/components/fpdebug/fpdbgdwarfdataclasses.pas @@ -896,9 +896,6 @@ property DwarfSymbolClassMapList: TFpSymbolDwarfClassMapList read GetDwarfSymbol implementation -uses - FpDbgCommon; - var FPDBG_DWARF_ERRORS, FPDBG_DWARF_WARNINGS, FPDBG_DWARF_SEARCH, FPDBG_DWARF_VERBOSE, // FPDBG_DWARF_DATA_WARNINGS, diff --git a/components/fpdebug/fpdmemorytools.pas b/components/fpdebug/fpdmemorytools.pas index 0aadadb570..64c615765a 100644 --- a/components/fpdebug/fpdmemorytools.pas +++ b/components/fpdebug/fpdmemorytools.pas @@ -428,6 +428,7 @@ type *) function ReadRegister(ARegNum: Cardinal; out AValue: TDbgPtr; AContext: TFpDbgLocationContext {= nil}): Boolean; function ReadRegisterAsAddress(ARegNum: Cardinal; out AValue: TDbgPtr; AContext: TFpDbgLocationContext {= nil}): Boolean; virtual; + property MemReader: TFpDbgMemReaderBase read FMemReader; public procedure SetCacheManager(ACacheMgr: TFpDbgMemCacheManagerBase); property CacheManager: TFpDbgMemCacheManagerBase read GetCacheManager; @@ -456,7 +457,6 @@ type property PartialReadResultLenght: QWord read FPartialReadResultLenght; property LastError: TFpError read FLastError; property MemLimits: TFpDbgMemLimits read FMemLimits; - property MemReader: TFpDbgMemReaderBase read FMemReader; end; function NilLoc: TFpDbgMemLocation; inline; diff --git a/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas b/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas index 23252fc25b..f22c547209 100644 --- a/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas +++ b/components/lazdebuggers/lazdebuggerfp/fpdebugdebugger.pas @@ -382,6 +382,9 @@ type procedure GetCurrentThreadAndStackFrame(out AThreadId, AStackFrame: Integer); function GetContextForEvaluate(const ThreadId, StackFrame: Integer): TFpDbgSymbolScope; + function CreateMemReader: TDbgMemReader; virtual; + function CreateMemConverter: TFpDbgMemConvertor; virtual; + function CreateMemManager: TFpDbgMemManager; virtual; function CreateLineInfo: TDBGLineInfo; override; function CreateWatches: TWatchesSupplier; override; function CreateThreads: TThreadsSupplier; override; @@ -3583,6 +3586,21 @@ begin Result := FindSymbolScope(ThreadId, StackFrame); end; +function TFpDebugDebugger.CreateMemReader: TDbgMemReader; +begin + Result := TFpDbgMemReader.Create(self); +end; + +function TFpDebugDebugger.CreateMemConverter: TFpDbgMemConvertor; +begin + Result := TFpDbgMemConvertorLittleEndian.Create; +end; + +function TFpDebugDebugger.CreateMemManager: TFpDbgMemManager; +begin + Result := TFpDbgMemManager.Create(FMemReader, FMemConverter); +end; + function TFpDebugDebugger.GetClassInstanceName(AnAddr: TDBGPtr): string; var AnErr: TFpError; @@ -4590,9 +4608,9 @@ begin FBreakUpdateList := TBreakPointUpdateList.create(); FExceptionStepper := TFpDebugExceptionStepping.Create(Self); FPrettyPrinter := TFpPascalPrettyPrinter.Create(sizeof(pointer)); - FMemReader := TFpDbgMemReader.Create(self); - FMemConverter := TFpDbgMemConvertorLittleEndian.Create; - FMemManager := TFpDbgMemManager.Create(FMemReader, FMemConverter); + FMemReader := CreateMemReader; + FMemConverter := CreateMemConverter; + FMemManager := CreateMemManager; FMemManager.MemLimits.MaxMemReadSize := TFpDebugDebuggerProperties(GetProperties).MemLimits.MaxMemReadSize; FMemManager.MemLimits.MaxArrayLen := TFpDebugDebuggerProperties(GetProperties).MemLimits.MaxArrayLen; FMemManager.MemLimits.MaxStringLen := TFpDebugDebuggerProperties(GetProperties).MemLimits.MaxStringLen; diff --git a/components/lazdebuggers/lazdebuggerfp/fpdebugdebuggerbase.pas b/components/lazdebuggers/lazdebuggerfp/fpdebugdebuggerbase.pas index b35e6075c5..c4c45298b6 100644 --- a/components/lazdebuggers/lazdebuggerfp/fpdebugdebuggerbase.pas +++ b/components/lazdebuggers/lazdebuggerfp/fpdebugdebuggerbase.pas @@ -22,7 +22,7 @@ type FDbgController: TDbgController; FMemManager: TFpDbgMemManager; FMemReader: TDbgMemReader; - FMemConverter: TFpDbgMemConvertorLittleEndian; + FMemConverter: TFpDbgMemConvertor; FLockList: TFpDbgLockList; FWorkQueue: TFpThreadPriorityWorkerQueue; @@ -71,7 +71,7 @@ type property DbgController: TDbgController read FDbgController; property MemManager: TFpDbgMemManager read FMemManager; property MemReader: TDbgMemReader read FMemReader; - property MemConverter: TFpDbgMemConvertorLittleEndian read FMemConverter; + property MemConverter: TFpDbgMemConvertor read FMemConverter; property LockList: TFpDbgLockList read FLockList; property WorkQueue: TFpThreadPriorityWorkerQueue read FWorkQueue; end; diff --git a/components/lazdebuggers/lazdebuggerfprspremote/rspremotedebugger.pas b/components/lazdebuggers/lazdebuggerfprspremote/rspremotedebugger.pas index d07fe85da7..e9ef3538ee 100644 --- a/components/lazdebuggers/lazdebuggerfprspremote/rspremotedebugger.pas +++ b/components/lazdebuggers/lazdebuggerfprspremote/rspremotedebugger.pas @@ -66,6 +66,8 @@ type private FProcessConfig: TRemoteConfig; procedure UpdateProcessConfig; + protected + function CreateMemManager: TFpDbgMemManager; override; public constructor Create(const AExternalDebugger: String); override; destructor Destroy; override; @@ -96,6 +98,11 @@ begin TRemoteConfig(FProcessConFig).SkipSectionsList.Assign(AProperties.SkipUploadOfSectionList); end; +function TFpRspRemoteDebugger.CreateMemManager: TFpDbgMemManager; +begin + Result := TAvrMemManager.Create(FMemReader, FMemConverter); +end; + constructor TFpRspRemoteDebugger.Create(const AExternalDebugger: String); begin inherited Create(AExternalDebugger);