mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-25 18:09:20 +02:00
Consolidated parameters for TDbgProcess.Create, StartInstance and AttachToInstance.
This commit is contained in:
parent
a23062a904
commit
4055d9420b
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user