Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8539[/thread]

eval stoppen (Seite 2)

Leser: 1


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
renee
 2006-11-30 15:58
#72079 #72079
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst Dir ja mal CPAN:Devel::ebug anschauen, wie dort es gelöst ist mit "Schritt für Schritt durch den Code".
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/
sid burn
 2006-11-30 17:14
#72080 #72080
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Noch eine kleine Ergänzung. Du solltest natürlich noch das CHLD Signal abfangen damit keine Zombie Prozesse entstehen.

Dafür solltest du am anfang noch soetwas hinzufügen.
Code: (dl )
1
2
use POSIX 'WNOHANG';
$SIG{CHLD} = sub { 1 while waitpid(-1,WNOHANG) };


Ich weiß nicht inwieweit das ganze auf Windows übertragbar ist. Und ob es überhaupt Funktioniert. Wenn kein CHLD Signal gesendet wird (da ja eh kein Child prozess in diesem Sinne beendet wurde), dann stört es unter Windows nicht weiter.

Diese beiden Zeilen verhindern, unter einem Unix ähnlichen OS, dass Zombies entstehen. Diese Zeilen solltest du also wegen der Portabilität hinzufügen.\n\n

<!--EDIT|sid burn|1164902486-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
renee
 2006-11-30 17:24
#72081 #72081
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=sid burn,30.11.2006, 16:14][...]

Diese beiden Zeilen verhindert dann aber unter einem Unix ähnlichen OS, das dort keine Zombies entstehen. Diese Zeilen solltest du also wegen der Portabilität noch hinzufügen.[/quote]
Eher das Gegenteil ist der Fall ;) (hast Du ja auch in Deinem ersten Satz gesagt)...

Doppelte Verneinung ist eine verstärkte Zustimmung... SCNR\n\n

<!--EDIT|renee|1164900261-->
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/
sid burn
 2006-11-30 18:02
#72082 #72082
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
@renee
Ich hab den Bug aus meinen Beitrag entfernt und neu released. ;)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
PerlProfi
 2006-11-30 19:26
#72083 #72083
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Danke nochmal.

Ich habe mir jetzt auch mal Devel::ebug angesehen und stelle fest, dass immer die erste Zeile übersprungen wird, ausserdem werden die einzelnen Zeilen nicht ausgeführt, und ich habe noch nicht herausbekommen, wie ich es anstelle nicht eine Datei zu durchlaufen, sondern einen String.
Wenn ich die Funktion finde in der die Datei eingelesen wird kann ich mir eine entsprechende für einen String ja nachbauen, aber wo sitzt diese Funktion?

Jetzt mal ein Beispiel.

Das Hauptprogramm:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl
use strict;
use warnings 'all';
use Devel::ebug;

my $ebug = Devel::ebug->new;
$ebug->program("devel-ebug-test.pl");
$ebug->load;

until ($ebug->finished)
{
print "At line ". $ebug->line ."\n";
print "Code: ". $ebug->codeline ."\n";
$ebug->step;
}


Ausgabe:
Code: (dl )
1
2
3
4
5
6
At line 1
Code: use Devel::ebug::Backend;BEGIN { do 'C:/Perl/site/lib/sitecustomize.pl' };
At line 3
Code:
At line 5
Code:


devel-ebug-test.pl:
Code: (dl )
1
2
3
4
5
print "Das Programm\n";

<STDIN>;

print "\nDas Programm ist zu Ende\n";


Übrigens muss ich vor Zeile 5 Return drücken.
Komisch nur das er print() nicht ausführt und die leeren Zeilen, sowie die Zeile mit <STDIN> nicht ausgibt.

Ich habs auch schon mit next() versucht, aber das ist eigentlich nicht was ich will, und da bekomme ich das selbe Ergebniss.

Das mit dem fork() hab ich gerade ausprobiert, das klappt nicht, hat wohl mit Tk zu tun.

MfG PerlProfi\n\n

<!--EDIT|PerlProfi|1164909880-->
PerlProfi
 2006-11-30 20:16
#72084 #72084
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Anstatt fork() wollte ich jetzt doch nochmal threads benutzen, auch wenn Tk nicht thread safe seien soll.
Man kann wohl nicht den thread zerstören?

MfG PerlProfi
PerlProfi
 2006-11-30 22:52
#72085 #72085
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
[quote=PerlProfi,30.11.2006, 19:16]Anstatt fork() wollte ich jetzt doch nochmal threads benutzen, auch wenn Tk nicht thread safe seien soll.
Man kann wohl nicht den thread zerstören?

MfG PerlProfi[/quote]
Also ich meinte nicht diesen thread hier, sondern threads in Perl, so dass die Funktion, die der thread ausführt abgebrochen wird.

MfG PerlProfi
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2006-11-29 17:33.