![]() |
Indy Exceptions in der IDE bewusst abschalten
Hallo,
ich habe folgendes Problem in meiner Anwendung. Ich benutze die Indy Komponenten zur Kommunikation über TCPIP mit einem Gerät A. Jetzt möchte ich in meinem Projekt aber ein anderen Abschnitt debuggen welcher relativ rechenlastig/threadlastig ist. Gerät A ist zur Zeit nicht mit meinem Rechner vorhanden und somit nicht erreichbar. Dies ist mir auch bewusst und interessiert mich auch nicht beim Debuggen, da ich gerade was ganz anderes teste. Durch Contextwechsel oder ähnlichen, lande ich beim Debuggen sehr oft in der Unit "IdIOHandlerStack" (procedure TIdConnectThread.Execute;) im Except Abschnitt. Das blöde ist nur, selbst wenn ich durch meine Funktion mit F7/F8 durch debugge, lande ich auf einmal in dieser Unit und wenn man nicht aufpasst so schnell, debuggt man auf einmal 2/3 Zeilen dieser Unit :-( Kann ich das irgendwie abschalten, dass ich dort nicht lande, weil ich ja weiß, das Gerät A nicht da ist? Das wird über das TimeOut Verbindungsaufbaues kommen zum Gerät A |
AW: Indy Exceptions in der IDE bewusst abschalten
Spontan fallen mir zwei Möglichkeiten ein bei denen ich aber nicht sagen kann, ob sie dir weiterhelfen.
Zum Einen erscheint ja beim Debuggen und beim Auftreten einer Exception immer der Dialog mit den berühten Tasten "Anhalten", "Fortsetzen", "Abbrechen". Dort gibt es ja auch noch eine CheckBox "Bei Exceptions dieses Typs nicht anhalten". Hierbei weiß ich aber nicht, ob dir das weiterhilft, da Indy ja doch sehr viele verschiedene Exceptions wirft und auch gleiche Exceptions in deinen anderen Units dann auch nicht mehr abgefangen werden. Die zweite Möglichkeit ist, sagen wir mal, nur umsetzbar, wenn es sich dabei um wenige Methoden in der Indy Unit handelt. Dann könntest du in der Methode einen BreakPoint setzen und bei den Eigenschaften den Haken bei "Anhalten" rausnehmen und bei "Spätere Exceptions ignorieren" einfügen. Alternativ dazu könntest du die gesamte Netzwerk Funktion außer Betrieb nehmen. Hierzu müsste man allerdings dein Projekt und dein SourceCode kennen um zu wissen was du denn überhaupt debuggen möchtest und wie das mit den Netzwerk Funktionen zusammenhängt. |
AW: Indy Exceptions in der IDE bewusst abschalten
Das "normale" Exception Fenster mit anhalten usw kommt ja gar nicht. Ich lande direkt in der Unit als wenn da ein Breakpoint wäre im Exception Teil...
Ein paar Exception-Typen habe ich bereits in der Ignore Liste aufgenommen: EIdNotASocket EIdConnectTimeout Ich kann also den Haken für "diesen Typ nicht mehr anzeigen" gar nicht auswählen, weil der Dialog gar nicht kommt. Die einzige Lösung bisher ist, dass ich den Bereich der Indy ausklammere, sodass die Netzwerkfunktionen im Projekt keine Rolle spielen und ich kann in Ruhe meine Sachen debuggen. Dachte nur, dies wäre nicht die einzige Lösung |
AW: Indy Exceptions in der IDE bewusst abschalten
Bei den Quellen zu meinem Delphi fliegt in der von Dir genannenten Methode eventuell ein EIdSocketError. Den würd' ich mal mit in die Ignore Liste aufnehmen.
Der zweite Exceptionblock fragt halt nur nach e : Exception, da mal prüfen, was genau für 'ne Exception da bei Dir auftritt und die mit in die Ignore Liste aufnehmen. (Mal e.ClassName abfragen.) |
AW: Indy Exceptions in der IDE bewusst abschalten
Einfach EIdException in die ignore-Liste aufzunehmen geht nicht? Neben den Dialogen die beim Auftreten einer Exception angezeigt werden gibt es ja auch die ignore-Liste unter Debugging - Sprach-Exceptions. Da kann man EIdException hinzufügen.
|
AW: Indy Exceptions in der IDE bewusst abschalten
Klar, wenn alle Indy-Exceptions ignoriert werden sollen, wäre das die erste Wahl.
|
AW: Indy Exceptions in der IDE bewusst abschalten
E.ClassName = Nicht verfügbarer Wert
E.Message = 'Socket-Fehler # 10038Socket-Operation für Nicht-Socket.'#$D#$A Ich lande im Except Teil von:
Delphi-Quellcode:
procedure TIdConnectThread.Execute;
begin try FBinding.Connect; except on E: Exception do begin FExceptionOccured := True; FExceptionMessage := E.Message; if E is EIdSocketError then begin if (EIdSocketError(E).LastError <> Id_WSAEBADF) and (EIdSocketError(E).LastError <> Id_WSAENOTSOCK) then begin FLastSocketError := EIdSocketError(E).LastError; end; end; end; end; end; |
AW: Indy Exceptions in der IDE bewusst abschalten
Ok, die Methode sieht anders aus, als bei meiner Delphiversion.
Schau bitte mal nach, ob es einen ausführlichen Kommentar zur
Delphi-Quellcode:
gibt, bei meiner Version ist das der Fall. Dort gibt es auch Hinweise zum Fehler 10038, aber mehr als EIdNotASocket muss in die Ignore Liste (was ja schon geschehen ist), kann ich da auch nicht erkennen.
procedure TIdStack.RaiseSocketError(AErr: integer);
Ist e.ClassType auch unbekannt? Sonst darüber schauen, welche Exception/s noch in die Ignore Liste muss / müssen. |
AW: Indy Exceptions in der IDE bewusst abschalten
Nochmal dass ich das richtig verstehe:
Das "Exceptions im Debugger ignorieren" hat hiermit doch nichts zu tun! Angenommen ich wandere mit F8 schön Schritt für Schritt durch meine Anwendung in meinem mir ausgesuchten Thread. Irgendwann tritt, in einem völlig anderen Thread, eine Exception auf und mit F8 geht es nun plötzlich im except-Teil eines völlig anderen Threads weiter. So habe ich das verstanden. Ob zwischendurch noch einmal das modale "Exception XY aufgetreten" Fenster kommt oder man es unterdrückt hat spielt eigentlich keine Rolle. So habe ich das verstanden. Und ich kenne das auch, kenne dafür aber auch keine Lösung. Du wirst also gezwungen sauberen Code zu schreiben der nicht an deine Indy-Implementation gekoppelt ist sondern dass du für deinen Debug-Marathon einfach eine leere Fake-Implementation verwenden kannst und die Indy-Exceptions nicht mehr auftreten. :twisted: |
AW: Indy Exceptions in der IDE bewusst abschalten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz