Debugger: reset thread on start/init

git-svn-id: trunk@42913 -
This commit is contained in:
martin 2013-09-23 14:07:28 +00:00
parent c5f9e05da6
commit b49550e81b
2 changed files with 17 additions and 0 deletions

View File

@ -2272,6 +2272,7 @@ type
protected
procedure ChangeCurrentThread({%H-}ANewId: Integer); virtual;
procedure RequestMasterData; virtual;
procedure DoStateChange(const AOldState: TDBGState); override;
procedure DoStateEnterPause; override;
procedure DoStateLeavePause; override;
procedure DoStateLeavePauseClean; override;
@ -5816,6 +5817,13 @@ begin
//
end;
procedure TThreadsSupplier.DoStateChange(const AOldState: TDBGState);
begin
if (Debugger.State = dsStop) and (CurrentThreads <> nil) then
CurrentThreads.Clear;
inherited DoStateChange(AOldState);
end;
procedure TThreadsSupplier.DoStateEnterPause;
begin
if (CurrentThreads = nil) then Exit;
@ -6143,6 +6151,7 @@ begin
TThreadEntry(Flist[0]).Free;
FList.Delete(0);
end;
FCurrentThreadId := 0;
end;
procedure TThreads.Add(AThread: TThreadEntry);

View File

@ -7192,6 +7192,8 @@ begin
if (State = dsError) and (DebugProcessRunning) then begin
FCurrentStackFrameValid := False;
FCurrentThreadIdValid := False;
FCurrentThreadId := 0;
FCurrentStackFrame := 0;
SendCmdLn('kill'); // try to kill the debugged process. bypass all queues.
DebugProcess.Terminate(0);
end;
@ -7210,6 +7212,12 @@ end;
procedure TGDBMIDebugger.DoBeforeState(const OldState: TDBGState);
begin
if State in [dsStop] then begin
FCurrentStackFrameValid := False;
FCurrentThreadIdValid := False;
FCurrentThreadId := 0;
FCurrentStackFrame := 0;
end;
inherited DoBeforeState(OldState);
Threads.CurrentThreads.CurrentThreadId := FCurrentThreadId; // TODO: Works only because CurrentThreadId is always valid
end;