AGB  ·  Datenschutz  ·  Impressum  







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

NonVcl Fehler Programmweit abfangen

Ein Thema von gandime · begonnen am 13. Jan 2009 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
gandime
(Gast)

n/a Beiträge
 
#1

NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 13:44
Hi,
wie kann ich bei einem NonVcl Projekt Programmweit Fehler abfangen und bearbeiten?
In VCL ist es ja einfach mit application.OnException.
Hier im Forum hab ich nichts gefunden was mir geholfen hat


mfg
gandime
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 13:52
Try-Except um die "Hauptprozedur"
und/oder jeweils jede einzelne Nachrichtenbearbeitung (oder nur die Releventen) in der Nachrichtenschleife per Try-Except absichern.

OnException dürfte Letzterem entsprechen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 14:09
Schau dir mal an wie Luckie das gelöst hat in seinen SFX Tools:

SFX Tools
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 14:42
Kurzfassung aus Delphi:
Delphi-Quellcode:
procedure TApplication.HandleException(Sender: TObject);
begin
  if Assigned(FOnException) then
    FOnException(Sender, Exception(ExceptObject))
  else
    ShowException(Exception(ExceptObject));
end;

procedure TApplication.WndProc(var Message: TMessage);
begin
  try
    {bearbeiten der Nachrichtenschleife}
  except
    HandleException(Self);
  end;
end;
wie gesagt, einfach die CodeTeile per Try-Except absichen, wo etwas passieren kann

und diese Try-Except-Blöcke sind üerall in der Unit Forms verteilt (vorallem fast überall, wo Ereignisprozeduren des Programmierers aufgerufen werden).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 14:45
Genau so ein Abfangen wie in der WndProc von TApplication gibt es aber auch in TControl.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#6

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 14:54
@himitsu:
Die Idee hatte ich auch aber mit try except funktioniert das leider nicht da ich den ClientSocket benutze, welcher z.B. eine fehlgeschlagene Connection direkt Programmweit auswirft.
sry hatte vergessen zu sagen das ich den ClientSocket benutze!
@lbccaleb:
In Luckies Source habe ich nichts von einer Programmweiten exception gefunden. (Ich hab den Source aber nur überflogen!)

und nochmal an die fleißigen poster^^
@himitsu nochmal:
hmh und das funktioniert Programmweit?
wie muss ich es inizialisieren?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 15:13
Exceptions werden eigentlich nur innerhalb des entsprechenden Thread ausgelößt und natürlich dort auch behandelt.

Du mußt eigentlich nur den Thread absichern, worin dein ClientSocket läuft.

Problematisch wird's nur, wenn dort ein eigener/weiterer Thread erstellt wird und darin die Exception auftritt.
Aber im Normalfall sollte es reichen, wenn du die auf.

[add] nur blöd, wenn ClientSocket ich mal danach suche, dann bekomm ich das gefühl, als wenn der sich 'nen eigenen Thread besorgt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 15:18
Schreib mal die globale Variable Classes.ApplicationHandleException auf eine von dir definierte Methode.

Edit: Classes.ApplicationHandleException ist "procedure (Sender: TObject) of object" und wird normalerweise über die Unit Controls, welche aus der Unit Forms das Application-Objekt initialisiert, mit der Methode Application.HandleException initialisiert.
Wenn du also kein Applicationobjekt hast (also keine Unit Forms und/oder Controls) sollte das so funktionieren. Damit fängst du die Excetpions der Sockets und diverser anderer Objekte ab.

Wie hast du eigentlich die Messagebearbeitung realisiert? Da müsstest du (auch) eingreifen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 16:11
Zitat von gandime:
@lbccaleb:
In Luckies Source habe ich nichts von einer Programmweiten exception gefunden. (Ich hab den Source aber nur überflogen!)
Schau dir mal die Unit Exceptions an, die sich dort drinn befindet..
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
gandime
(Gast)

n/a Beiträge
 
#10

Re: NonVcl Fehler Programmweit abfangen

  Alt 13. Jan 2009, 17:38
ok dann hab ich exceptions.pas falsch interpretiert.
Weil ich habe nirgens eine inizialisieren gefunden!
Wie funktioniert denn das ganze dingen Oo erlich gesagt verstehe ich aus der exception.pas fast kein wort!

Edit:
@sirius:
Das funktioniert super so:
Delphi-Quellcode:
program PExceptionTest;

uses
  Windows,
  ScktComp,
  Classes;

{$R *.res}

type Exception = Class (TObject)
    class procedure OnError(Sender: TObject);
end;

var
  cs:TClientSocket;
  Msg:TMsg;

class procedure Exception.OnError(Sender: TObject);
begin
  MessageBox(0, 'Error', 'moin^^', 0);
end;

begin
  CS:=TClientSocket.Create(nil);
  Classes.ApplicationHandleException:=Exception.OnError;
  cs.Host:='127.0.0.1';
  cs.port:=1234; //kein Server unter dieser Adresse erreichbar
  cs.Active:=true;
  while GetMessage(Msg, 0, 0, 0) do
  begin
    DispatchMessage(Msg);
  end;
end.
Blos ein kleines problem besteht, das ich keine Fehler-Nachricht bekomme, worauf ich reagieren kann!
Also mit Thread funktioniert das auch.
Aber funktioniert das auch, wenn ich das gute stück in einem Thread benutze, sodas er nir Fehler von seinem Thread verwendet?
  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 16:05 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