Schrift
[thread]13[/thread]

Statt abzubrechen gehts an anderer Stelle weiter



<< >> 6 Einträge, 1 Seite
kmonster
 2003-08-21 20:58
#612 #612
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
Hi, ich versuche mal mein Problem zu erklären:

Mein Script benutzt viele Module und Klassen, das Hauptprogramm (pl Datei) selbst ist ziemlich kurz und verzweigt je nach Action in verschiedene Funktionen. Das ganze kann mehrer Ebenen tief reingehen. Tritt jetzt irgendwo ein Laufzeitfehler auf, die ich natürlich mit die abfange, dann bricht das Script nicht ab sondern mach im Hauptprogramm (oberste Ebene pl Datei) weiter genau beim nächsten Befehl. Dabei ist es egal was für eine Art Laufzeitfehler es ist und es ist auch egal wie weit verzweigt der Fehler auftritt. Es wird immer komplett nach oben in die pl Datei gesprungen. Mir ist das völlig unerklärlich, evtl ein Nebeneffekt durch irgendein eingebundenes Modul/Pragma.

Gruss Volker
jan10001
 2003-08-21 21:00
#613 #613
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Sei mal so nett und poste mal deinen Code, ansonsten können wir nur raten. ;)
[E|B]
 2003-08-21 21:15
#614 #614
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Schon mal versucht dein Programm statt die mit einer Funktion und anschließendem exit zu beenden?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
kmonster
 2003-08-21 21:56
#615 #615
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
das abfangen mittels funktion und exit klappt. solange sich etwas abfangen lässt. datenbankabfragen zum beispiel lassen sich gar nicht mehr abfangen, da der or zweig nicht mehr abgearbeitet wird. ansonsten liegt es am die. schreibe ich irgenwo im quelltext die() so wird sofort ins hauptprogramm zurückgesprungen.

den code kann ich leider nicht posten da es über 10k zeilen sind.

hier mal ein kleines beispiel zur verdeutlichung

haupt.pl:
Code: (dl )
1
2
3
4
5
use strict;
use modul1;

mach_was();
print "Hier bin ich";

modul.pm
Code: (dl )
1
2
3
4
5
6
7
use strict;
use modul2;

sub mach_was {
   mach_weiter();
   exit;
}

modul2.pm
Code: (dl )
1
2
3
4
5
6
7
use strict;

sub mach_weiter {
   print "hallo ";
   die("fehler");
   exit;
}


resultat:
hallo
hier bin ich

natürlich würde diese programm fehlerfrei laufen, ich fürchte das irgendein modul dafür verantwortlich ist. hier mal eine liste von allen fertigen modulen/pragmas die ich verwende:

use strict;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use File::Copy;
use Fcntl qw(:flock);
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Response;
use HTTP::Request;
use URI::Escape;

mehr kann ich leider nicht sagen, es ist zum verfluchen.

gruss
volker
[E|B]
 2003-08-21 22:11
#616 #616
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Was spricht gegen die Variante mit exit?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
kmonster
 2003-08-21 22:30
#617 #617
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
sicherlich fange ich meine fehler so ab und protokolliere sie auch dabei.
problem: manche module benutzen intern "die" zum beispiel DBI. ausserdem gibt es ja auch manchmal laufzeitfehler die an stellen entstehen die man nicht abfängt, zum beispiel beim referenzieren und dereferenzieren. das kommt zwar bei einem fertigen programm nicht vor, wohl aber beim testen von neuen rutinen. es ist dann sehr zeitraubend den fehler durch tracen einzugrenzen.
cant use undefined value in hash referenz at line 25 hilft da echt weiter... aber das werd ich wohl nicht mehr sehen.
<< >> 6 Einträge, 1 Seite



View all threads created 2003-08-21 20:58.