Thread Absturz bei exit( 0 ) Befehl innerhalb eines Buttons (6 answers)
Opened by YAPD at 2017-08-07 20:58

YAPD
 2017-08-07 20:58
#187159 #187159
User since
2015-09-20
146 Artikel
BenutzerIn

user image
Guten Abend Zusammen,

ich habe mal wieder ein Problem, das ich mir nicht erklären kann & bräuchte hier Eure Unterstützung :

Und zwar habe ich eine Oberfläche mittels Tk geschrieben. Im ersten
Schritt lese ich verschiedene Parameter aus einer Config-Datei ein,
die ich Parser.pm genannt habe & im Unterordner Modules liegt.

Also eingebunden mit Modules::Parser;

Nun habe ich für meine Anwendung eine weitere .PM Datei, in der das
Fehler Handling abgearbeitet wird namens Hilfe.pm, die ebenfalls im Ordner Module liegt :
more (14.0kb):


Code: (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/perl

# ---------------------------------------------------------------------------------------------------------

use strict;
use warnings;

use Tk;

use Win32;
use Win32::GUI;
use Win32::Process;

# ---------------------------------------------------------------------------------------------------------

sub Fehler_Hilfe_Oberflaeche {

my $Fenster_Fehler_Hilfe = MainWindow -> new( -title => "Fehler - Hilfe" );

my $Breite = 560;
my $Hoehe = 580;

$Fenster_Fehler_Hilfe -> geometry( $Breite . 'x' . $Hoehe );
$Fenster_Fehler_Hilfe -> update;

my $Top_Level = $Fenster_Fehler_Hilfe -> toplevel;

my $Fehler_Hilfe_Identifier = "$_[ 0 ]";

$_[ 1 ] -> Hide( );

# ---------------------------------------------------------------------------------------------------------

my %SQL_Server_Werte = ( "0001" => "Fehler bei der Initialisierung der Config - Datei 'XXX.cfg'" . "\n" .
"Die Ausführung der Anwendung ohne gültige Config - Datei" . "\n" .
"führte zu einem Absturz des Systems." . "\n" ,

"0002" => "Fehler bei der Erkennung eines Eintrags in der Config - Datei" . "\n" .
"'XXX.cfg'. Die manuelle Veränderung eines Eintrags führte zu" . "\n" .
"einem Absturz des Systems." . "\n" ,

"0003" => "Fehler bei der Zuweisung eines Eintrags aus der Config - " . "\n" .
"Datei 'XXX.cfg'. Die Existenz doppelter Eintraege in der " . "\n" .
"Config - Datei führte zu einem Absturz des Systems." . "\n" ,

"2000" => "Fehler bei der Etablierung der SQL - Verbindung." . "\n" .
"Die angegebene IP - Adresse weist keine gültige" . "\n" .
"IP V4 Formatierung auf. Dies führte zu einem" . "\n" .
"Absturz des Systems." . "\n" ,

"2001" => "Fehler bei der Etablierung der SQL - Verbindung." . "\n" .
"Die Formatierung des Ports weist keine gültige" . "\n" .
"IP V4 Formatierung auf. Dies führte zu einem" . "\n" .
"Absturz des Systems." . "\n" ,

"3000" => "Fehler bei der Identifizierung eines Eintrags aus der" . "\n" .
"Config - Datei 'Config.cfg'. Die eingegebene IP -" . "\n" .
"Adresse für die SQL - Verbindung ist keine gültige" . "\n" .
"einem Absturz des Systems." . "\n" ,

"3001" => "Fehler bei der Identifizierung des Ports für die SSL -" . "\n" .
"Verbindung." . "\n" ,

"3002" => "Fehler bei der Verzeichnis - Prüfung des Public - Keys" . "\n" .
"für die SSL - Verbindung. Die Nicht - Existenz dieses" . "\n" .
"Verzeichnisses führte zu einem Absturz des Systems." . "\n" ,

"3003" => "Fehler bei der Verzeichnis - Prüfung des Private - Keys" . "\n" .
"für die SSL - Verbindung. Die Nicht - Existenz dieses" . "\n" .
"Verzeichnisses führte zu einem Absturz des Systems." . "\n" ,

"3004" => "Fehler bei der Identifizierung des Private - Keys für" . "\n" .
"die SSL - Verbindung." . "\n" ,

"3005" => "Fehler bei der Identifizierung des Public - Keys für" . "\n" .
"die SSL - Verbindung." . "\n" ,

);

my $Betroffene_Bereiche = "";

# ---------------------------------------------------------------------------------------------------------

if( grep { $Fehler_Hilfe_Identifier eq $_ } "0000" .. "0005" ) { $Betroffene_Bereiche = "Config - Datei & Parsing"; }
if( grep { $Fehler_Hilfe_Identifier eq $_ } "2000" .. "2005" ) { $Betroffene_Bereiche = "SQL - Server"; }
if( grep { $Fehler_Hilfe_Identifier eq $_ } "3000" .. "3005" ) { $Betroffene_Bereiche = "SSL - Server"; }

# ---------------------------------------------------------------------------------------------------------

... Verschiedene Fenster

# ---------------------------------------------------------------------------------------------------------

$Fenster_Fehler_Hilfe -> Button( -text => ' Reperatur ' ,
-width => 33 ,
-height => 2 ,
-command => sub{ &Reparatur_Config( ) }

) -> place( -x => 50 , -y => 485 );

$Fenster_Fehler_Hilfe -> Button( -text => ' Ende ' ,
-width => 33 ,
-height => 2 ,
-command => sub{ exit( 0 ); }

) -> place( -x => 287 , -y => 485 );
MainLoop( );

# ---------------------------------------------------------------------------------------------------------

}

# ---------------------------------------------------------------------------------------------------------

1;


Diese Hilfe Datei rufe ich praktisch in jeder Datei auf & übergebe die Fehler Nummer.

Der Knackpunkt ist der Ende Button !

Code: (dl )
1
2
3
4
$Fenster_Fehler_Hilfe -> Button( -text    => ' Ende ' , 
-width => 33 ,
-height => 2 ,
-command => sub{ exit( 0 ); }


Wenn ich hier den exit( 0 ) Befehl verwende, stürzt der KOMPLETTE PERL INTERPRETER ab.

Ich schalte noch eine kleine Sub in jeder Datei vor, von der aus ich dann diese Hilfe Oberfläche aufrufe :

Code: (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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
sub Fehler_Verarbeitung {

# Übergabe des Fehler - Codes aus Sub - Routine

my $Fehler_Verarbeitung_Code = $_[ 0 ];

# Initialisierung des Fehler - Fensters

my $Fehler_Verarbeitung_Fenster = new Win32::GUI::Window( -name => "Fehler_Verarbeitung",
-title => "Fehler - Verarbeitung",
-pos => [ 100, 100 ] ,
-size => [ 350, 150 ] ,
-resizabble => 0 ,
-helpbox => 1 ,
-minimizebox => 0 ,
-maximizebox => 0 ,
-topmost => 1 ,

);

# Initialisierung der Schrift für Texte des Fehler - Fensters

my $Fehler_Verarbeitung_Schrift_Generelles = Win32::GUI::Font -> new( -size => 8 ,
-bold => 0 ,
-underline => 0 );

# Initialisierung der Schrift für Verweise des Fehler - Fensters

my $Fehler_Verarbeitung_Schrift_Verweise = Win32::GUI::Font -> new( -size => 8 ,
-bold => 0 ,
-underline => 1 );

# Allgemeine Fehler - Meldung

$Fehler_Verarbeitung_Fenster -> AddLabel( -text => "Fehler bei der Ausfuehrung des Befehls." ,
-font => $Fehler_Verarbeitung_Schrift_Generelles ,
-pos => [ 100 , 25 ] );

# Spezifischer Fehler - Code

$Fehler_Verarbeitung_Fenster -> AddLabel( -text => "Aktueller Fehler - Code : $Fehler_Verarbeitung_Code" ,
-font => $Fehler_Verarbeitung_Schrift_Generelles ,
-pos => [ 100 , 45 ] );

# Allgemeiner Verweis auf die Fehler - Verwaltung

$Fehler_Verarbeitung_Fenster -> AddLabel( -text => "Mehr ..." ,
-onClick => sub{ \&Fehler_Hilfe_Oberflaeche( $Fehler_Verarbeitung_Code , $Fehler_Verarbeitung_Fenster ) } ,
-font => $Fehler_Verarbeitung_Schrift_Verweise ,
-notify => 1 ,
-pos => [ 100 , 75 ] );

$Fehler_Verarbeitung_Fenster -> Enable( ); # Aktivierung des Fensters
$Fehler_Verarbeitung_Fenster -> Show( ); # Darstellung des Fensters

Win32::GUI::Dialog;



Hier die Fehler Meldung :

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Problemereignisname:	APPCRASH
Anwendungsname: perl.exe
Anwendungsversion: 5.24.1.1
Anwendungszeitstempel: 587c1e77
Fehlermodulname: StackHash_7d28
Fehlermodulversion: 0.0.0.0
Fehlermodulzeitstempel: 00000000
Ausnahmecode: 80000026
Ausnahmeoffset: 0000000000000000
Betriebsystemversion: 6.1.7601.2.1.0.256.4
Gebietsschema-ID: 1031
Zusatzinformation 1: 7d28
Zusatzinformation 2: 7d2841fb9da8e2cea4526a7f6ad234d5
Zusatzinformation 3: a41e
Zusatzinformation 4: a41efb5b646b2d6bfafda00467932ea3


Ist aber nicht sehr hilfreich :/

Weiss irgendjemand eventuell, warum ich diese ( 2 fache ) Fehlermeldung bekomme ??

NACHTRAG : Zerstöre ich das Fenster mit dem Button durch den Befehl
Code: (dl )
1
2
3
4
5
6
$Fenster_Fehler_Hilfe -> Button( -text    => ' Ende ' , 
-width => 33 ,
-height => 2 ,
-command => sub{ $Fenster_Fehler_Hilfe -> destroy; }

) -> place( -x => 287 , -y => 485 );


stürzt Perl nicht ab, allerdings schließt sich dann das Hauptfenster auch nicht :/

Vielen Dank im Voraus !

Viele Grüße
YAPD


Last edited: 2017-08-07 21:18:20 +0200 (CEST)
Yet Another Perl Developer

View full thread Absturz bei exit( 0 ) Befehl innerhalb eines Buttons