JMP-Zugriffsverletzung – wahrscheinliche Ursachen?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Wenn es möglich ist, diese Frage zu beantworten – und das ist natürlich nicht der Fall –, was sind dann wahrscheinlich die Ursachen für eine schwerwiegende Fehlermeldung, die besagt, dass „JMP eine Zugriffsverletzung begangen hat und heruntergefahren wird“, bitte?Sollte ich zum Beispiel auf einen Versuch achten, Daten in eine gesperrte Tabelle zu schreiben oder so etwas in der Art?
Ich bin im Laufe der Jahre bei verschiedenen Skriptübungen hin und wieder auf dieses Problem gestoßen, habe es aber nie wirklich geschafft, den Grund dafür herauszufinden.Normalerweise schaffe ich es, den Skriptblock zu isolieren, in dem der schwerwiegende Fehler offensichtlich auftritt, und ihn einfach anders umzuschreiben, woraufhin das Problem verschwindet.Da sich meine Skripterstellung im Laufe der Zeit verbessert hat, bin ich immer weniger auf solche Probleme gestoßen, aber hin und wieder bekomme ich immer noch eines – und ich schaue mir gerade eines mitten in einem ziemlich komplexen Skript an und frage mich, wo ich anfangen soll. Gibt es wahrscheinliche Ursachen, nach denen ich Ausschau halten sollte, oder zweifelhafte Skriptkonstruktionen, die wahrscheinlich einen solchen Fehler erzeugen?
Vielen Dank
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Ja, ich habe herausgefunden, dass bei Datentypen (z. B. Zeichen, Zahlen usw.), die alle in verschiedenen Spalten verwechselt sein sollten, dieser Verstoß auftreten kann, insbesondere wenn Sie mit großen Datenmengen arbeiten. In meinem Fall überlappten sich einige Zeilen meiner Tabelle leicht, daher hatte ich numerische Variablen, die in der spezifischen Spalte mit diesem Variablennamen hätten sein sollen, in einer Spalte mit dem Datentyp „Zeichen“. Das habe ich durch sorgfältiges Durchsehen der Datentabelle herausgefunden, nachdem der technische Support von JMP genau herausgefunden hatte, welche Zeilen in der Datentabelle das Problem verursachten. Anfangs gingen sie davon aus, dass es sich um einen Systemfehler handelte, aber ich habe herausgefunden, dass das daran lag, dass sich einige Variablen (wie zuvor beschrieben) leicht überlappten, beginnend mit den 331.670 Zeilen der Datentabelle, mit der ich arbeitete, als der Absturz/die Zugriffsverletzung auftrat. Ich schlage vor, dass Sie sorgfältig sicherstellen, dass sich jede Variable ordnungsgemäß in derselben Spalte befindet und dass der Datentyp und der Modellierungstyp für jede Spalte gleich sind. Das heißt, Sie sollten keine Zeichenvariable in einer Spalte mit numerischen Variablen haben. Auch wenn wir im Fall der Postleitzahl manchmal eine numerische Variable als Zeichen verwenden. Aber ich denke, Sie haben die Idee verstanden. Zumindest in meinem Fall scheint das das Problem zu sein. Ich habe es gelöst, indem ich einfach die ursprüngliche Textdatei neu geladen und die Daten erneut formatiert habe.
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Vielen Dank, Dan, für den Vorschlag, ich habe ihn gerade eingereicht.
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Wenn Sie ein Skript haben, das den Absturz demonstriert, senden Sie es bitte an Technischer JMP-Support .
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Das von Ihnen gemeldete Problem wurde für eine zukünftige Version behoben.Bitte melden Sie diese Probleme dem technischen Support, wenn Sie sie sehen. Wir versuchen, Abstürze so schnell wie möglich zu beheben und können Ihnen häufig dabei helfen, das zugrunde liegende Problem zu umgehen.
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Das Problem hing mit der Eingabe einer Textdatei zusammen, die in den letzten Zeilen Zeichendaten in Spalten mit numerischen Daten enthielt. Die Tabelle hatte über 291.000.000 Zeilen und diese leicht falsch platzierten Daten befanden sich in den letzten paar (4) Zeilen der Datentabelle. Ich habe diese korrigiert und es hat gut funktioniert und ich hatte das Problem erneut. Der technische Support von JMP lieferte genau die Zeile, in der seiner Meinung nach das Problem auftrat, aber nach einer erneuten Prüfung der Daten stellte ich fest, dass die eingegebenen Textdaten einige leicht falsch platzierte Daten in den falschen Feldern enthielten.
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Danke für die Eingaben. Ich denke, in diesem Fall hing das Problem überhaupt nicht damit zusammen, ob ein Code gut oder schlecht war oder nicht.
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Mit JMP können Sie mehrere Nachrichten in einer Codezeile senden, aber es macht keinen Sinn, dies zu tun – es ist hässlich, hat eine mehrdeutige Bedeutung und macht das Debuggen unmöglich.Vielleicht sind JMP-Abstürze nur eine Erinnerung daran, zu versuchen, anständigen Code zu schreiben!
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Ich bin auch auf dieses Problem gestoßen. In meinem Fall war es sehr schwierig, die Ursache herauszufinden, da das gesamte Skript eine große Schleife war und erst nach 20 oder 30 einzelnen Durchläufen abstürzte. und das geschah, nachdem ich das Skript so robust wie möglich gemacht hatte. Am Ende habe ich festgestellt, dass das Programm nicht abstürzt, wenn ich die Objekte jedes Mal erwähne.
Zum Beispiel:
Tu das nicht –
| dt10i << go to( :Event Duration ) << Move Selected Columns( After( „Event Date“ ) ) << go to( 2 ) << Clear Column Selection; |
tun Sie stattdessen Folgendes:
| dt10i << go to( :Duration ); |
dt10i << Ausgewählte Spalten verschieben( After( „Date“ ) );
dt10i << gehe zu (2);
dt10i << Spaltenauswahl löschen;
Ich habe dieses Problem nicht dokumentiert gefunden, bin mir aber sicher, dass ich es isoliert habe und dass es in meinem Fall die Ursache für den Programmabsturz war.
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Eine Zugriffsverletzung kann jedes Mal auftreten, wenn eine ungültige Speicheroperation auftritt. Ich bin mir nicht sicher, ob ich ein bestimmtes Muster gesehen habe, aber JMP scheint unglaublich robust gegenüber Tabellenoperationen zu sein, daher ist dies wahrscheinlich der letzte Ort, an dem ich suchen würde.Das Problem besteht natürlich darin, dass es schwierig und mühsam ist, den Ort des Problems zu diagnostizieren.Normalerweise füge ich einen Throw() in meinen Code ein, um zu versuchen, die Ausführung abzubrechen, bevor es zum Absturz kommt.Durch Verschieben der Position des Throw kann ich dann den Codebereich ausfindig machen, der das Problem verursacht.Manchmal habe ich etwas offensichtlich Dummes getan, manchmal waren es ein paar Fehler, die in ihrer Kombination katastrophal waren.
Hier ist ein Beispiel.Ein modales Fenster wird mit einem Handler für das Validierungsereignis erstellt. Der Handler gibt 1 oder 0 zurück und gibt an, ob das Fenster geschlossen werden soll, wenn auf „OK“ geklickt wird:
Neues Fenster ( "Prüfen" , << Modal ,
<< Beim Validieren (
txt = Trimmen ( teb << Text abrufen ) ;
Wenn ( Länge ( txt ) > 0 ,
ist gültig = 1
,
ist gültig = 0
) ;
// zurückkehren
ist gültig
) ,
Aufstellungsbox ( NCol ( 1 ) , Abstand ( 10 ) ,
Textfeld ( „Geben Sie etwas ein, irgendetwas, aber etwas:“ ) ,
teb = Textbearbeitungsfeld ( „“ )
)
)
Das funktioniert einwandfrei, Sie können es ausführen, ohne dass JMP abstürzt!Wenn wir eine Funktion oder einen Event-Handler schreiben, wird als letztes ausgewertet, was zurückgegeben wird (siehe Glue, um zu verstehen, warum).Aber irgendwann hat JMP eine Return-Funktion eingeführt, die das „Zurückgeben“ expliziter macht – sie funktioniert mit Funktionen, aber nicht mit Event-Handlern wie oben.Daher funktioniert das Ersetzen von isValid durch Return(isValid) in der letzten Zeile von OnValidate nicht.Aber JMP wird nicht abstürzen.Aber wenn ich versehentlich das OnClose-Ereignis verwende, wird JMP unzufrieden und gibt mir eine Zugriffsverletzung:
// Versuchen Sie das nicht zu Hause
Neues Fenster ( "Prüfen" , << Modal ,
<< Beim Schließen (
txt = Trimmen ( teb << Text abrufen ) ;
Wenn ( Länge ( txt ) > 0 ,
ist gültig = 1
,
ist gültig = 0
) ;
Zurückkehren (ist gültig)
) ,
Aufstellungsbox ( NCol ( 1 ) , Abstand ( 10 ) ,
Textfeld ( „Geben Sie etwas ein, irgendetwas, aber etwas:“ ) ,
teb = Textbearbeitungsfeld ( „“ )
)
)
Betreff: JMP-Zugriffsverletzung – wahrscheinliche Ursachen?Ich hatte das gleiche Problem zweimal in einer Stunde.