AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler in Konsole umleiten

Ein Thema von SeddyAtWork · begonnen am 18. Jun 2009 · letzter Beitrag vom 19. Jun 2009
Antwort Antwort
SeddyAtWork

Registriert seit: 18. Jun 2009
3 Beiträge
 
#1

Fehler in Konsole umleiten

  Alt 18. Jun 2009, 15:01
Hallo zusammen,
folgende Situation:
Ich habe eine Konsollen/Gui-Hybridanwendung, sprich ich kann mit writeln in die Konsole schreiben,
und mit showMessage ein Popup erstellen. Wenn ich nun einen Fehler produziere, z.B. Stelle 11 eines
10 Stelligen Arrays beschreiben, kommt solange Application.Run noch nicht ausgeführt wurde ein Fehler
in der Konsole, wenn das GUI schon gestartet ist erscheint die selbe Fehlermeldung als Popup-Fenster.
Da das Programm auf unserem Rechencluster(ohne Bildschirme) läuft, möchte ich, dass alle Fehlermeldungen
zu jeder Zeit in der Konsole ausgegeben werde, ist das realisierbar?
Kleiner Hinweis: die GUI komplett ab zu schalten, weil sie sowieso niemand sehen kann, kommt nicht
in Frage, der Aufwand wäre zu groß.
Schonmal vielen Dank für Lösungsvorschläge!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Fehler in Konsole umleiten

  Alt 18. Jun 2009, 15:08
Nahezu alle Fehler kommen beim Objekt Application vorbei. Dort wird dann ein Ereignis ausgelöst (OnException oder so ähnlich). Das kannst du dafür nutzen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#3

Re: Fehler in Konsole umleiten

  Alt 18. Jun 2009, 15:09
Wenn du da keine GUI nutzt, warum initialisierst du siese denn erst? (mit Application.Initialize)
Nja egal.

Du könntest einen Eigenen Exception-Handler registrieren,
{System.}ExceptProc := @ConsoleExceptHandler; oder nachträglich versuchen den GUI-Mode etwas rückgängig zu machen.
IsConsole := False;
Delphi-Quellcode:
procedure ConsoleExceptHandler(ExceptObject: TObject; ExceptAddr: Pointer); far;
var
  Title: array[0..63] of Char;
  Buffer: array[0..1023] of Char;
  OemBuffer: array[0..2047] of AnsiChar;
  Dummy: Cardinal;
begin
  ExceptionErrorMessage(ExceptObject, ExceptAddr, Buffer, SizeOf(Buffer));
  Flush(Output);
  CharToOem(Buffer, OemBuffer);
  WriteFile(GetStdHandle(STD_ERROR_HANDLE), OemBuffer, StrLen(OemBuffer), Dummy, nil);
  WriteFile(GetStdHandle(STD_ERROR_HANDLE), sLineBreak, 2, Dummy, nil);
  Halt(1);
end;


;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SeddyAtWork

Registriert seit: 18. Jun 2009
3 Beiträge
 
#4

Re: Fehler in Konsole umleiten

  Alt 18. Jun 2009, 15:32
Erstmal Danke für die schnellen Antworten.
Mit isConsole kann ich nur den gegenteiligen Zweck erreichen, sprich Popups trotz nicht initialisierter GUI,
der ExceptionHandler ist implementier, und funktioniert auch teilweise, ich habe ihn vor dem initialisieren der GUI initialisiert, und er wird aufgerufen, wenn direkt danach ein Fehler kommt, aber des initialisieren der GUI scheint ihn wieder zu überschreiben, denn wenn die GUI aktiv ist kommen wieder Popups.
Ich habe versucht, den ExceptionHandler nach dem starten der GUI nochmal zu initialisieren, das hat aber nichts gebracht.
Wie kann ich den ExceptionHandler dauerhaft initialisieren?
  Mit Zitat antworten Zitat
SeddyAtWork

Registriert seit: 18. Jun 2009
3 Beiträge
 
#5

Re: Fehler in Konsole umleiten

  Alt 19. Jun 2009, 11:25
So, eine Lösung ist gefunden.
Das Problem war, dass die wärend der Laufzeig der GUI geworfenen Exceptions nicht ungebremmst geworfen wurden, sie wurden nämlich abgefangen, und verarbeitet, ohne, dass mein ExceptionHandler etwas davon mitbekommen hat.
Die Lösung des ganzen war im Delphi-Sourcecode die Funktion TApplication.ShowException um die simple Zeile writeLn(E.Message) zu ergänzen, jetzt erscheint ein Popup-Fenster und eine Meldung wird auf der Konsole ausgegeben, damit kann ich dann leben.
Vielen Dank, dass ihr mich in die richtige Richtung geschubst habt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz