Schrift
[thread]9066[/thread]

Manipulierung von __DIE__ und __WARN__ (Seite 2)

Leser: 2


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
renee
 2007-06-06 13:13
#77257 #77257
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@opi: kann man bei Log::Handler die caller-"Stufen" angeben, die ausgegeben werden sollen? caller(0) und (1) interessiert mich ja nicht wirklich, weil es Modul-eigene Methoden sind...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
bloonix
 2007-06-06 13:50
#77258 #77258
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=renee,06.06.2007, 11:13]@opi: kann man bei Log::Handler die caller-"Stufen" angeben, die ausgegeben werden sollen? caller(0) und (1) interessiert mich ja nicht wirklich, weil es Modul-eigene Methoden sind...[/quote]
Mit der Option debug_skip kannst du mitteilen, welche Stufen
übersprungen werden sollen. Wenn du mehr möchtest, lässt sich das
bestimmt einbauen.

Edit Beispiel:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;
use warnings;
use Log::Handler;

my $log = Log::Handler->new(
filename => \*STDERR,
newline => 1,
debug_mode => 2,
debug_skip => 2,
);

$SIG{__DIE__} = sub { $log->trace(@_); exit(9); };

die "here we die";


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Jun 06 12:04:50 [TRACE] here we die at ./foo.pl line 15.
CALL(1):
package main
filename ./foo.pl
line 15
subroutine main::__ANON__
hasargs 1
wantarray 0
CALL(0):
package main
filename ./foo.pl
line 13
subroutine Log::Handler::trace
hasargs 1
\n\n

<!--EDIT|opi|1181123787-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2007-06-06 13:51
#77259 #77259
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Strat,06.06.2007, 11:11]gefaellt mir sehr gut und ist in vielen Situationen sehr hilfreich.[/quote]
Wenn man dann im Nachhinein debuggen möchte, kann man auch
debug => 1 setzen... dann werden alle aktiven Log Level mit caller()
Informationen ausgegeben. Inaktive Log Level aktiviert man dann einfach.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
renee
 2007-06-06 14:08
#77260 #77260
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=opi,06.06.2007, 11:50][quote=renee,06.06.2007, 11:13]@opi: kann man bei Log::Handler die caller-"Stufen" angeben, die ausgegeben werden sollen? caller(0) und (1) interessiert mich ja nicht wirklich, weil es Modul-eigene Methoden sind...[/quote]
Mit der Option debug_skip kannst du mitteilen, welche Stufen
übersprungen werden sollen. Wenn du mehr möchtest, lässt sich das
bestimmt einbauen.[/quote]
Nene, das ist genau das was ich wissen wollte.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2007-06-07 01:23
#77261 #77261
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
$SIG{__WARN__} ist meines Erachtens OK. Das Manipulieren von $SIG{__DIE__} ist dagegen sehr gefährlich: die() wird in Perl oft als throw() innerhalb eines eval-Blocks verwendet --- das ist legitime Praxis und wird in vielen Modulen praktiziert. Wenn du jetzt einen Handler mit exit() hast, stirbt dein Programm, obwohl eigentlich alles in Ordnung ist. Dagegen kann man sich nur schützen, wenn man in seinen eval-Blöcken als erstes local $SIG{__DIE__}; schreibt.
Strat
 2007-06-07 14:18
#77262 #77262
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
stimmt, danke fuer den Tip. vielleicht sollte man trotzdem im backtrace suchen, ob ein eval vorkommt, weil es ja module gibt, die eval verwenden...\n\n

<!--EDIT|Strat|1181211561-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
bloonix
 2007-06-07 14:45
#77263 #77263
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
zugegeben... bislang habe ich nicht immer daran gedacht local zu ver-
wenden, werde das aber in zukunft bestimmt ernster nehmen
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2007-06-07 22:45
#77264 #77264
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Note: diese Verwendung von local $SIG{__DIE__} muss von den Autoren der anderen Module vorgenommen werden. Das wird aber nur selten gemacht.

Ich bin vor ein paar Monaten auch darüber gestolpert. Im rcslog meiner Anwendung finde ich nur noch den Kommentar
Code: (dl )
setting $SIG{__DIE__} etc. is a bad idea
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2007-06-05 13:45.