Consolidated parameters for TDbgProcess.Create, StartInstance and AttachToInstance.

This commit is contained in:
ccrause 2021-10-03 20:29:51 +02:00 committed by Martin
parent a23062a904
commit 4055d9420b
6 changed files with 69 additions and 69 deletions

View File

@ -107,11 +107,12 @@ type
function CreateWatchPointData: TFpWatchPointData; override;
public
class function isSupported(target: TTargetDescriptor): boolean; override;
constructor Create(const AFileName: string; const AProcessID, AThreadID: Integer; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig); override;
destructor Destroy; override;
function StartInstance(AFileName: string; AParams, AnEnvironment: TStrings;
function StartInstance(AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean; override;
out AnError: TFpError): boolean; override;
// FOR AVR target AAddress could be program or data (SRAM) memory (or EEPROM)
// Gnu tools masks data memory with $800000
@ -668,8 +669,7 @@ begin
Result := TFpRspWatchPointData.Create;
end;
constructor TDbgAvrProcess.Create(const AFileName: string; const AProcessID,
AThreadID: Integer; AnOsClasses: TOSDbgClasses;
constructor TDbgAvrProcess.Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig);
begin
if Assigned(AProcessConfig) and (AProcessConfig is TRemoteConfig) then
@ -690,22 +690,21 @@ begin
inherited Destroy;
end;
function TDbgAvrProcess.StartInstance(AFileName: string; AParams,
AnEnvironment: TStrings; AWorkingDirectory, AConsoleTty: string;
AFlags: TStartInstanceFlags; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean;
function TDbgAvrProcess.StartInstance(AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags; out
AnError: TFpError): boolean;
var
AnExecutabeFilename: string;
begin
Result := false;
AnExecutabeFilename:=ExcludeTrailingPathDelimiter(AFileName);
AnExecutabeFilename:=ExcludeTrailingPathDelimiter(Name);
if DirectoryExists(AnExecutabeFilename) then
begin
DebugLn(DBG_WARNINGS, 'Can not debug %s, because it''s a directory',[AnExecutabeFilename]);
Exit;
end;
if not FileExists(AFileName) then
if not FileExists(Name) then
begin
DebugLn(DBG_WARNINGS, 'Can not find %s.',[AnExecutabeFilename]);
Exit;
@ -718,7 +717,7 @@ begin
end;
try
FConnection := TRspConnection.Create(AFileName, self, self.FRemoteConfig);
FConnection := TRspConnection.Create(Name, self, self.FRemoteConfig);
FConnection.Connect;
try
FConnection.RegisterCacheSize := RegArrayLength;

View File

@ -551,6 +551,7 @@ type
FLastLibraryUnloaded: TDbgLibrary;
FOnDebugOutputEvent: TDebugOutputEvent;
FOSDbgClasses: TOSDbgClasses;
FProcessID: Integer;
FThreadID: Integer;
FWatchPointData: TFpWatchPointData;
FProcessConfig: TDbgProcessConfig;
@ -560,7 +561,6 @@ type
procedure SetPauseRequested(AValue: boolean);
procedure ThreadDestroyed(const AThread: TDbgThread);
protected
FProcessID: Integer;
FBreakpointList, FWatchPointList: TFpInternalBreakpointList;
FCurrentBreakpoint: TFpInternalBreakpoint; // set if we are executing the code at the break
// if the singlestep is done, set the break again
@ -599,15 +599,16 @@ type
function AnalyseDebugEvent(AThread: TDbgThread): TFPDEvent; virtual; abstract;
function CreateWatchPointData: TFpWatchPointData; virtual;
procedure Init(const AProcessID, AThreadID: Integer);
public
class function isSupported(ATargetInfo: TTargetDescriptor): boolean; virtual;
constructor Create(const AFileName: string; const AProcessID, AThreadID: Integer; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); virtual;
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); virtual;
destructor Destroy; override;
function StartInstance(AFileName: string; AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean; virtual;
function AttachToInstance(AFileName: string; APid: Integer; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean; virtual;
function StartInstance(AParams, AnEnvironment: TStrings; AWorkingDirectory, AConsoleTty: string;
AFlags: TStartInstanceFlags; out AnError: TFpError): boolean; virtual;
function AttachToInstance(APid: Integer; out AnError: TFpError): boolean; virtual;
function AddInternalBreak(const ALocation: TDBGPtr): TFpInternalBreakpoint; overload;
function AddInternalBreak(const ALocation: TDBGPtrArray): TFpInternalBreakpoint; overload;
@ -1741,8 +1742,7 @@ begin
Result := lib.FindProcSymbol(AName);
end;
constructor TDbgProcess.Create(const AFileName: string; const AProcessID,
AThreadID: Integer; AnOsClasses: TOSDbgClasses;
constructor TDbgProcess.Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig);
const
{.$IFDEF CPU64}
@ -1752,8 +1752,8 @@ const
{.$ENDIF}
begin
FMemManager := AMemManager;
FProcessID := AProcessID;
FThreadID := AThreadID;
FProcessID := 0;
FThreadID := 0;
FOSDbgClasses := AnOsClasses;
FProcessConfig := AProcessConfig;
@ -1826,18 +1826,15 @@ begin
inherited;
end;
function TDbgProcess.StartInstance(AFileName: string; AParams,
AnEnvironment: TStrings; AWorkingDirectory, AConsoleTty: string;
AFlags: TStartInstanceFlags; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean;
function TDbgProcess.StartInstance(AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags; out
AnError: TFpError): boolean;
begin
DebugLn(DBG_VERBOSE, 'Debug support is not available for this platform.');
result := false;
end;
function TDbgProcess.AttachToInstance(AFileName: string; APid: Integer;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out
AnError: TFpError): boolean;
function TDbgProcess.AttachToInstance(APid: Integer; out AnError: TFpError): boolean;
begin
DebugLn(DBG_VERBOSE, 'Attach not supported');
Result := false;
@ -2460,6 +2457,12 @@ begin
Result := TFpWatchPointData.Create;
end;
procedure TDbgProcess.Init(const AProcessID, AThreadID: Integer);
begin
FProcessID := AProcessID;
FThreadID := AThreadID;
end;
function TDbgProcess.WriteData(const AAdress: TDbgPtr; const ASize: Cardinal; const AData): Boolean;
begin
result := false;

View File

@ -1486,7 +1486,7 @@ begin
Flags := [];
if RedirectConsoleOutput then Include(Flags, siRediretOutput);
if ForceNewConsoleWin then Include(Flags, siForceNewConsole);
FCurrentProcess := OSDbgClasses.DbgProcessClass.Create(FExecutableFilename, AttachToPid, 0, OsDbgClasses, MemManager, ProcessConfig);
FCurrentProcess := OSDbgClasses.DbgProcessClass.Create(FExecutableFilename, OsDbgClasses, MemManager, ProcessConfig);
if not Assigned(FCurrentProcess) then
begin
Result := false;
@ -1495,9 +1495,9 @@ begin
end;
if AttachToPid <> 0 then
Result := FCurrentProcess.AttachToInstance(FExecutableFilename, AttachToPid, OsDbgClasses, MemManager, FLastError)
Result := FCurrentProcess.AttachToInstance(AttachToPid, FLastError)
else
Result := FCurrentProcess.StartInstance(FExecutableFilename, Params, Environment, WorkingDirectory, FConsoleTty, Flags, OsDbgClasses, MemManager, FLastError);
Result := FCurrentProcess.StartInstance(Params, Environment, WorkingDirectory, FConsoleTty, Flags, FLastError);
if Result then
begin

View File

@ -147,11 +147,11 @@ type
function AnalyseDebugEvent(AThread: TDbgThread): TFPDEvent; override;
function CreateWatchPointData: TFpWatchPointData; override;
public
function StartInstance(AFileName: string; AParams, AnEnvironment: TStrings;
function StartInstance(AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean; override;
out AnError: TFpError): boolean; override;
class function isSupported(ATargetInfo: TTargetDescriptor): boolean; override;
constructor Create(const AName: string; const AProcessID, AThreadID: Integer; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
destructor Destroy; override;
function ReadData(const AAdress: TDbgPtr; const ASize: Cardinal; out AData): Boolean; override;
@ -624,13 +624,13 @@ begin
Result := TFpIntelWatchPointData.Create;
end;
constructor TDbgDarwinProcess.Create(const AName: string; const AProcessID,
AThreadID: Integer; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig);
constructor TDbgDarwinProcess.Create(const AFileName: string;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager;
AProcessConfig: TDbgProcessConfig);
var
aKernResult: kern_return_t;
begin
inherited Create(AName, AProcessID, AThreadID, AnOsClasses, AMemManager, AProcessConfig);
inherited Create(AFileName, AnOsClasses, AMemManager, AProcessConfig);
GetDebugAccessRights;
aKernResult:=task_for_pid(mach_task_self, AProcessID, FTaskPort);
@ -646,10 +646,9 @@ begin
inherited Destroy;
end;
function TDbgDarwinProcess.StartInstance(AFileName: string; AParams,
AnEnvironment: TStrings; AWorkingDirectory, AConsoleTty: string;
AFlags: TStartInstanceFlags; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean;
function TDbgDarwinProcess.StartInstance(AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags; out
AnError: TFpError): boolean;
var
AProcess: TProcessUTF8;
AnExecutabeFilename: string;
@ -657,7 +656,7 @@ var
begin
result := false;
AnExecutabeFilename:=ExcludeTrailingPathDelimiter(AFileName);
AnExecutabeFilename:=ExcludeTrailingPathDelimiter(Name);
if DirectoryExists(AnExecutabeFilename) then
begin
if not (ExtractFileExt(AnExecutabeFilename)='.app') then
@ -702,7 +701,7 @@ begin
GConsoleTty := AConsoleTty;
AProcess.Execute;
FProcessID:=AProcess.ProcessID;
Init(AProcess.ProcessID, 0);
FExecutableFilename:=AnExecutabeFilename;
FMasterPtyFd := AMasterPtyFd;
FProcProcess := AProcess;

View File

@ -303,14 +303,14 @@ type
function CreateWatchPointData: TFpWatchPointData; override;
public
class function isSupported(ATargetInfo: TTargetDescriptor): boolean; override;
constructor Create(const AName: string; const AProcessID, AThreadID: Integer; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
destructor Destroy; override;
function StartInstance(AFileName: string; AParams, AnEnvironment: TStrings;
function StartInstance(AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean; override;
out AnError: TFpError): boolean; override;
function AttachToInstance(AFileName: string; APid: Integer; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean; override;
function AttachToInstance(APid: Integer; out AnError: TFpError): boolean; override;
function ReadData(const AAdress: TDbgPtr; const ASize: Cardinal; out AData): Boolean; override;
function WriteData(const AAdress: TDbgPtr; const ASize: Cardinal; const AData): Boolean; override;
@ -831,13 +831,13 @@ begin
Result := TFpIntelWatchPointData.Create;
end;
constructor TDbgLinuxProcess.Create(const AName: string; const AProcessID,
AThreadID: Integer; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig);
constructor TDbgLinuxProcess.Create(const AFileName: string;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager;
AProcessConfig: TDbgProcessConfig);
begin
FMasterPtyFd:=-1;
FPostponedSignals := TFpDbgLinuxSignalQueue.Create;
inherited Create(AName, AProcessID, AThreadID, AnOsClasses, AMemManager, AProcessConfig);
inherited Create(AFileName, AnOsClasses, AMemManager, AProcessConfig);
end;
destructor TDbgLinuxProcess.Destroy;
@ -847,10 +847,9 @@ begin
inherited Destroy;
end;
function TDbgLinuxProcess.StartInstance(AFileName: string; AParams,
AnEnvironment: TStrings; AWorkingDirectory, AConsoleTty: string;
AFlags: TStartInstanceFlags; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; out AnError: TFpError): boolean;
function TDbgLinuxProcess.StartInstance(AParams, AnEnvironment: TStrings;
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags; out
AnError: TFpError): boolean;
var
AProcess: TProcessUTF8;
AMasterPtyFd: cint;
@ -858,14 +857,14 @@ var
begin
Result := false;
AnExecutabeFilename:=ExcludeTrailingPathDelimiter(AFileName);
AnExecutabeFilename:=ExcludeTrailingPathDelimiter(Name);
if DirectoryExists(AnExecutabeFilename) then
begin
DebugLn(DBG_WARNINGS, 'Can not debug %s, because it''s a directory',[AnExecutabeFilename]);
Exit;
end;
if not FileExists(AFileName) then
if not FileExists(Name) then
begin
DebugLn(DBG_WARNINGS, 'Can not find %s.',[AnExecutabeFilename]);
Exit;
@ -895,15 +894,15 @@ begin
AProcess.CurrentDirectory:=AWorkingDirectory;
AProcess.Execute;
FProcessID:=AProcess.ProcessID;
Init(AProcess.ProcessID, 0);
FMasterPtyFd := AMasterPtyFd;
FProcProcess := AProcess;
sleep(100);
Result:=FProcessID > 0;
Result := ProcessID > 0;
except
on E: Exception do
begin
DebugLn(DBG_WARNINGS, Format('Failed to start process "%s". Errormessage: "%s".',[AFileName, E.Message]));
DebugLn(DBG_WARNINGS, Format('Failed to start process "%s". Errormessage: "%s".',[Name, E.Message]));
AProcess.Free;
if GSlavePTyFd>-1 then
@ -914,9 +913,8 @@ begin
end;
end;
function TDbgLinuxProcess.AttachToInstance(AFileName: string; APid: Integer;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; out
AnError: TFpError): boolean;
function TDbgLinuxProcess.AttachToInstance(APid: Integer; out AnError: TFpError
): boolean;
begin
Result := fpPTrace(PTRACE_ATTACH, APid, nil, Pointer(PTRACE_O_TRACECLONE)) = 0;

View File

@ -184,7 +184,9 @@ type
procedure InitializeLoaders; override;
function CreateWatchPointData: TFpWatchPointData; override;
public
constructor Create(const AName: string; const AProcessID, AThreadID: Integer; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig);
override;
destructor Destroy; override;
function ReadData(const AAdress: TDbgPtr; const ASize: Cardinal; out AData): Boolean; override;
@ -488,8 +490,7 @@ begin
Result := TFpIntelWatchPointData.Create;
end;
constructor TDbgWinProcess.Create(const AName: string; const AProcessID,
AThreadID: Integer; AnOsClasses: TOSDbgClasses;
constructor TDbgWinProcess.Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig);
begin
{$ifdef cpui386}
@ -497,7 +498,7 @@ begin
{$else}
FBitness := b64;
{$endif}
inherited Create(AName, AProcessID, AThreadID, AnOsClasses, AMemManager, AProcessConfig);
inherited Create(AFileName, AnOsClasses, AMemManager, AProcessConfig);
end;
destructor TDbgWinProcess.Destroy;