Bei der Verwendung von
Indy in der Version 9 kommt es beim Debuggen öfters vor das man Fehlermeldungen .. oder sagen wir besser Ereignisse
.. in der Form
EIdConnectTimeout
EIdConnClosedGracefully
EIdSocketError
erhält was nur lästig ist und die sich NICHT durch einen
try
except
Block abfangen lassen, was man normalerweise vermuten würde. Eben weil die Entwickler von
Indy es nicht als Fehler (für das ein EXCEPT stattfinden würde) deklarieren, sondern nur eine Ereignisnachricht. Irgend wo in einer Include Date wird dann etwas davon gefaselt es in die Liste der "Silent Exceptions" aufzunehmen. Doch wo stehen die ?
Die Lösung des Problems ist Trivial
und nachdem ich mich selbst mit diesem Problem einige Zeit herumgeärgert habe möchte ich die Lösung nicht für mich behalten.
Unter:
Tools -> Debugger Optionen -> Sprach-Exceptions
einfach die oben genannten Ereignisse mittels [Hinzufügen] einfügen und Voilá er ignoriert fürderhin beim Debuggen dieses Ereignis. Mit dem Häckchen an der Seite kann man dies bequem ein und ausschalten.
Schöner wäre es natürlich das Ereignis über einen Compilereschalter hinzuzufügen, aber ich habe leider keinen gefunden .. na was solls .. Lustigerweise funktioniert das Beispiel mit dem Timeouts trotz das der Debugger sie ignoriert .. oder sagen wir mal besser .. er schmeißt sie nicht mehr in eine DialogBox auf den Bildschirm sondern behandelt sie so wie man es von try..except gewohnt ist
Unterhalb noch einmal ein Beispiel das mir soviel Probleme bereitete
Code:
...
with IdHTTP1 do begin // ein HTTP Client Objekt
IdHTTP1.Host:=192.168.1.2;
IdHTTP1.Port:=80;
if IdHTTP1.Connected = False then begin
try begin
// Ein Connect auf die
IP versuchen
IdHTTP1.Connect(100); // TimeOut 100 Millisekunden
{
... hier das tun was nach dem Connect passieren soll ...
}
end
except
{
... hier das tun was bei einem TimeOut passieren soll ...
}
end
end
else begin
{
... hier das tun was passieren soll wenn schon Connected ...
}
end;
Disconnect;
end;
...