mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 03:29:28 +02:00
FpDebug: Linux, check if thread is known.
(cherry picked from commit 9fd6981814
)
This commit is contained in:
parent
085045f648
commit
ffdc389c25
@ -394,6 +394,14 @@ var
|
||||
GConsoleTty: string;
|
||||
GSlavePTyFd: cint;
|
||||
|
||||
function dbgsThreadId(AThread: TDbgThread): string;
|
||||
begin
|
||||
if AThread = nil then
|
||||
result := 'nil'
|
||||
else
|
||||
result := inttostr(AThread.ID);
|
||||
end;
|
||||
|
||||
Function WIFSTOPPED(Status: Integer): Boolean;
|
||||
begin
|
||||
WIFSTOPPED:=((Status and $FF)=$7F);
|
||||
@ -1545,12 +1553,12 @@ begin
|
||||
if (FSOLibEventBreakpoint <> nil) and not FSOLibEventBreakpoint.Enabled then
|
||||
FSOLibEventBreakpoint.Enabled:=True;
|
||||
{$IFDEF DebuglnLinuxDebugEvents}
|
||||
debuglnEnter(['>>>>> TDbgLinuxProcess.Continue TID:', AThread.ID, ' SingleStep:', SingleStep ]); try
|
||||
debuglnEnter(['>>>>> TDbgLinuxProcess.Continue TID:', dbgsThreadId(AThread), ' SingleStep:', SingleStep ]); try
|
||||
{$ENDIF}
|
||||
FSingleSteppingThreadID := -1;
|
||||
|
||||
// Terminating process and all threads
|
||||
if FIsTerminating then begin
|
||||
if FIsTerminating and (AThread <> nil) then begin
|
||||
fpseterrno(0);
|
||||
AThread.BeforeContinue;
|
||||
fpPTrace(PTRACE_KILL, AThread.ID, pointer(1), nil);
|
||||
@ -1559,7 +1567,7 @@ begin
|
||||
exit;
|
||||
end;
|
||||
|
||||
if TDbgLinuxThread(AThread).FIsPaused then // in case of deInternal, it may not be paused and can be ignored
|
||||
if (AThread <> nil) and TDbgLinuxThread(AThread).FIsPaused then // in case of deInternal, it may not be paused and can be ignored
|
||||
AThread.NextIsSingleStep:=SingleStep;
|
||||
|
||||
// check for pending events in other threads
|
||||
@ -1618,7 +1626,7 @@ begin
|
||||
exit;
|
||||
end;
|
||||
|
||||
if TDbgLinuxThread(AThread).FIsPaused then // in case of deInternal, it may not be paused and can be ignored
|
||||
if (AThread <> nil) and TDbgLinuxThread(AThread).FIsPaused then // in case of deInternal, it may not be paused and can be ignored
|
||||
if HasInsertedBreakInstructionAtLocation(AThread.GetInstructionPointerRegisterValue) then begin
|
||||
TempRemoveBreakInstructionCode(AThread.GetInstructionPointerRegisterValue);
|
||||
TDbgLinuxThread(AThread).FIsSteppingBreakPoint := True;
|
||||
@ -1653,7 +1661,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
if TDbgLinuxThread(AThread).FIsPaused then // in case of deInternal, it may not be paused and can be ignored
|
||||
if (AThread <> nil) and TDbgLinuxThread(AThread).FIsPaused then // in case of deInternal, it may not be paused and can be ignored
|
||||
if not FIsTerminating then begin
|
||||
fpseterrno(0);
|
||||
//AThread.BeforeContinue;
|
||||
|
Loading…
Reference in New Issue
Block a user