Danke fuer die Antworten, aber der Patch hat keine besserung gebracht und die Firewall/
AV blockieren Delphi in keinster Weise, ABER der Tipp mit F7 bringt mich ein Stueck weiter. Die
IDE friert nicht direkt ein, sondern in der
unit idThread in Zeile 351 (TIdThread.Execute):
Delphi-Quellcode:
try
if Loop
then begin
while not Stopped
do begin
try
Run; <<<<<<<<<
except
on E:
Exception do begin
if not HandleRunException(E)
then begin
Terminate;
raise;
end;
end;
end;
end;
F8/F9 nach dem BP friert die
IDE ein, steppe ich hingegen mit F7 weiter komme ich bis IdCustomTCPServer Zeile 933 (TIdListenerThread.Run):
Delphi-Quellcode:
try
// GetYarn can raise exceptions
LYarn := Server.Scheduler.AcquireYarn;
LIOHandler := Server.IOHandler.Accept(Binding, Self, LYarn); <<<<<<<<<
if LIOHandler =
nil then begin
// Listening has finished
Stop;
Abort;
end else begin
// We have accepted the connection and need to handle it
LPeer := TIdTCPConnection.Create(
nil);
LPeer.IOHandler := LIOHandler;
LPeer.ManagedIOHandler := True;
end;
Steppe ich hier wiederum mit F7 weiter komme ich bis IdServerIOHandlerSocket Zeile 131 (TIdServerIOHandlerSocket.Accept):
Delphi-Quellcode:
while not AListenerThread.Stopped do begin
if ASocket.Select(250) then begin <<<<<<<<<<
if LIOHandler.Binding.Accept(ASocket.Handle) then begin
LIOHandler.AfterAccept;
Result := LIOHandler;
LIOHandler:=nil;
Break;
end;
end;
end;
Danach gehts hierhin: IdSocketHandle Zeile 535:
Delphi-Quellcode:
function TIdSocketHandle.Select(ATimeOut: Integer = IdTimeoutInfinite): Boolean;
begin
Result := FReadSocketList.SelectRead(ATimeOut); <<<<<
TIdAntiFreezeBase.DoProcess(Result = False);
end;
Anschließend hierher: IdStackWindows Zeile 995:
Delphi-Quellcode:
function TIdSocketListWindows.SelectRead(const ATimeout: Integer): Boolean;
var
LSet: TFDSet;
begin
// Windows updates this structure on return, so we need to copy it each time we need it
GetFDSet(LSet);
FDSelect(@LSet, nil, nil, ATimeout); <<<<<<<
Result := LSet.fd_count > 0;
end;
Gleiche
Unit Zeile 1013 (TIdSocketListWindows.FDSelect):
Delphi-Quellcode:
class function TIdSocketListWindows.FDSelect(AReadSet, AWriteSet,
AExceptSet: PFDSet; const ATimeout: Integer): Boolean;
var
LResult: Integer;
LTime: TTimeVal;
LTimePtr: PTimeVal;
begin
if ATimeout = IdTimeoutInfinite then begin
LTimePtr := nil;
end else begin
LTime.tv_sec := ATimeout div 1000;
LTime.tv_usec := (ATimeout mod 1000) * 1000;
LTimePtr := @LTime;
end;
LResult := IdWinsock2.select(0, AReadSet, AWriteSet, AExceptSet, LTimePtr); <<<<<<<
Result := GBSDStack.CheckForSocketError(LResult) > 0;
end;
Und letzendlich laden wir hier in IdWinsock2 Zeile 5228 (Stub_select):
Delphi-Quellcode:
function Stub_select(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Integer; stdcall;
begin
@select := FixupStub(hWinSockDll, 'select'); {Do not Localize}
Result := select(nfds, readfds, writefds, exceptfds, timeout); <<<<<<<
end;
Hier ist mit Sourcecode Schluss, weiter gehts in der CPU-Ansicht:
Freeze bei
Code:
004D759F FF15187B6100 call dword ptr [$00617b18]
[$00617b18] ist WS2_32.select. Hier friert die
IDE beim ersten call ein:
Code:
76364988 E803CAFFFF call $76361390
In diesem call passiert eigentlich nichts, keine calls/jmps oder aenhliches. Es wir nur ein bisschen in Speicher rumgeschrieben.
Steppe ich mit F8 ueber diesen call friert die
IDE ein.
Steppe ich mit F7 durch den call durch komme ich zum naechsten lock:
Code:
76364A1D FF5060 call dowrd ptr [eax+$60]
Danach haengt es hier:
Code:
743D6572 E848B1FFFF call $743d16bf
Hier findet man wieder nur Speicherzugriffe, keinerlei calls oder jmps ... Die Spur verlaeuft sich im Sand.
Grueße,
Win32