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

Speichzugriffehler bei Nutzung von Perl Tk Modul

Leser: 1


<< >> 3 Einträge, 1 Seite
Gast Gast
 2009-02-18 11:53
#118951 #118951
Hallo an alle....

In einem meiner Scripte verwende ich in einer Subroutine das Perl Tk Modul

diese Subroutine dient dem Nutzer als Meldung das das Script noch läuft, folgendes Problem tritt nun bei einigen Nutzern auf. Das Script bricht mit der Meldung Speicherzugriffehler zufällig an einer der drei Stellen im Script an denen die Tk Subroutine aufgerufen wird ab.

Habe jetzt mal die Versionen geprüft.

Auf meinem Rechner (läuft alles problemlos)Version Perl-tk-800.024-118
Problemrechner Version perl-tk-804.027-15.2

und hier noch die subroutine im Code

Code: (dl )
1
2
3
4
5
6
7
sub message {
$mw = MainWindow->new();
$open = $mw->Label(-text=>'Indizierung Läuft')->pack;
$open = shift;
$mw->after(200*10, sub{$mw->destroy});
MainLoop;
}

Wei gesagt unter meiner Version läuft alles prima bei der anderen mal ja mal nein.
Habe auch schon mit use warnings und -w probehalber getestet soweit alles I.O.

Thomas


---
//Modedit Gwendragon: Bitte CODE-Tags verwenden
---
renee
 2009-02-18 12:32
#118955 #118955
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Benutzt das Skript threads oder ähnliches? Kannst Du das Verhalten reproduzieren (bricht das Skript immer dann ab, wenn im Rest vom Skript das gleiche gemacht wird)?
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/
Gast Gast
 2009-02-18 13:56
#118958 #118958
Hallo Renee

Ich schreibe dir noch mal den Hauptteil vom Script wo ich die Message aufrufe.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use File::Find;
use CGI;
use POSIX 'strftime';
use Tk;

&message;

@html_dat = ('a'..'z', 0..9);

foreach $html_dat (@html_dat){
     @dateien = undef;
     $q = new CGI;
     open (HTML, ">$html_dat.html");
     find (\&wanted, $ENV{HOME});
     select(HTML);
     print $q->start_html(-title=>"Meine Dateien";),

      # Jetzt wird eine Html datei geschrieben mit einer Tabelle in der 
      mit den gefunden Dateien alle die mit a b c usw bis 9 beginnen) 
      im Dateinamen
     
      print $q->end_html;
      close(HTML);
      select(STDOUT);
      
      $i = $i+1;
      if($i == 10){&message}; #Tk Modul Label 'indizierung läuft'
      if($i == 20){&message};
      if($i == 30){&message};
};


Habe das mit dem Aufruf mal so gelöst das bei 10 20 30 sten Durchlauf die Meldung erscheint. habe das einfach in der Schleife hinten dran geschrieben. Es gibt sicher elegantere Lösungen.

Die subroutine wanted in der Zeile Find prüft nur ob es eine versteckte Datei oder verzeichnis ist, dann wird nicht in die Html datei geschrieben und wenn nicht versteckt wird mit stat die Erstellungszeit der Datei ausgelesen und mit Modul POSIX 'strftime' formatiert dd mm yyyy ausgegeben.

Interessant ist das Script bricht bei Nutzung von perl-tk-804.027-15.2 ab entweder bei if($i == 10) ... oder 20 oder 30 frei nach Gusto.

Nutze ich wie auf meinem Rechner installiert die Version perl-tk-800.024-118 läuft alles ohne das geringste Problem.

Edit (renee): bitte die CODE-Tags verwenden
<< >> 3 Einträge, 1 Seite



View all threads created 2009-02-18 11:53.