Violazione dell'accesso a JMP: cause probabili?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Se è possibile rispondere a questa domanda - e ovviamente potrebbe non esserlo - quali sono le probabili cause di un messaggio di errore irreversibile che afferma che "JMP ha eseguito una violazione di accesso e verrà chiuso", per favore?Ad esempio, dovrei cercare un tentativo di scrivere dati su una tabella bloccata o qualcosa del genere?
Ho riscontrato questo problema di tanto in tanto durante vari esercizi di scripting nel corso degli anni, e non sono mai riuscito a individuarne il motivo.Di solito riesco a isolare il blocco di script all'interno del quale evidentemente si verifica l'errore fatale e semplicemente a riscriverlo in modo diverso, dopodiché il problema scompare.Man mano che il mio scripting è migliorato nel tempo, ho riscontrato sempre meno problemi di questo tipo, ma ogni tanto ne ricevo ancora uno - e ne sto guardando uno proprio ora nel mezzo di uno script piuttosto complesso e mi chiedo da dove cominciare... Ci sono cause probabili a cui dovrei prestare attenzione o costruzioni di script dubbie che potrebbero generare un errore del genere?
Grazie molto
Oggetto: Violazione dell'accesso a JMP: cause probabili?Sì, ho capito che se hai tipi di dati (ad esempio carattere, numerico, ecc.) che dovrebbero essere tutti mescolati in colonne diverse, potresti incorrere in questa violazione soprattutto quando hai a che fare con grandi quantità di dati. Nel mio caso, alcune righe della mia tabella erano leggermente sovrapposte, quindi avevo variabili numeriche che avrebbero dovuto essere nella colonna specifica con quel nome di variabile in una colonna con tipo di dati carattere. L'ho capito esaminando attentamente la tabella dei dati dopo che il supporto tecnico JMP ha identificato attentamente quali righe nella tabella dei dati hanno causato il problema. Inizialmente, presumevano che si trattasse di un bug di sistema, ma ho capito che ciò è accaduto perché alcune variabili (come descritto in precedenza) si sovrapponevano leggermente a partire dalle 331.670 righe della tabella dati con cui stavo lavorando quando si è verificata la violazione di arresto anomalo/accesso. Ti suggerisco di assicurarti attentamente che ciascuna variabile sia opportunamente nella stessa colonna con il tipo di dati e il tipo di modellazione uguali per ciascuna colonna. Cioè, non dovresti avere una variabile di carattere in una colonna di variabili numeriche. Anche se a volte utilizziamo variabili numeriche come carattere nel caso del codice postale. Ma penso che tu abbia capito l'idea. Almeno nel mio caso sembra essere questo il problema. L'ho risolto semplicemente ricaricando il file di testo originale e formattando nuovamente i dati.
Oggetto: Violazione dell'accesso a JMP: cause probabili?Grazie Dan per il suggerimento, l'ho appena archiviato.
Oggetto: Violazione dell'accesso a JMP: cause probabili?Se hai uno script che dimostra l'arresto anomalo, invialo a Supporto tecnico JMP .
Oggetto: Violazione dell'accesso a JMP: cause probabili?Il problema segnalato è stato risolto per una versione futura.Ti preghiamo di segnalare questi problemi al supporto tecnico quando li vedi: cerchiamo di risolvere i crash il prima possibile e spesso possiamo aiutarti a risolvere il problema di fondo.
Oggetto: Violazione dell'accesso a JMP: cause probabili?Il problema era associato all'input di un file di testo che nelle ultime righe conteneva dati di caratteri in colonne con dati numerici. La tabella aveva oltre 291.000 righe e i dati leggermente fuori posto si trovavano nelle ultime (4) righe della tabella dati. Li ho corretti e ha funzionato bene e ho avuto di nuovo il problema. Il supporto tecnico di JMP ha fornito la riga esatta in cui si era verificato il problema, ma dopo aver riesaminato i dati ho scoperto che i dati del testo di input contenevano alcuni dati leggermente fuori posto nei campi errati.
Oggetto: Violazione dell'accesso a JMP: cause probabili?Grazie per gli input Penso che nel caso in questione il problema non fosse in alcun modo associato al fatto che un codice fosse buono o cattivo o meno.
Oggetto: Violazione dell'accesso a JMP: cause probabili?JMP ti consente di inviare più messaggi in una riga di codice, ma non ha senso farlo: è brutto, ha un significato ambiguo e rende impossibile il debug.Quindi forse i crash di JMP sono solo un promemoria per noi di provare a scrivere codice decente!
Oggetto: Violazione dell'accesso a JMP: cause probabili?anch'io ho riscontrato questo problema nel mio caso è stato molto difficile individuarne la causa poiché l'intero script era un grosso loop e si bloccava solo dopo 20 o 30 esecuzioni individuali. e questo dopo aver reso la sceneggiatura il più solida possibile. alla fine ho scoperto che se menziono gli oggetti ogni volta il programma non si blocca.
Per esempio:
non farlo -
| dt10i << vai a( :Durata evento ) << Sposta le colonne selezionate( Dopo( “Data evento” ) ) << vai a( 2 ) << Cancella la selezione della colonna; |
fai invece questo:
| dt10i << vai a( :Durata ); |
dt10i << Sposta le colonne selezionate (dopo (“Data”));
dt10i <
dt10i << Cancella la selezione della colonna;
Non ho trovato questo problema documentato, ma sono sicuro di averlo isolato e che nel mio caso è stata la causa del crash del programma.
Oggetto: Violazione dell'accesso a JMP: cause probabili?Una violazione di accesso può verificarsi ogni volta che si verifica un'operazione di memoria non valida, non sono sicuro di aver visto uno schema particolare, ma JMP sembra incredibilmente robusto per le operazioni sulle tabelle, quindi è probabilmente l'ultimo posto in cui cercherei.Il problema ovviamente è se è difficile e noioso diagnosticare la posizione del problema.Di solito inserisco un Throw() nel mio codice per provare a interrompere l'esecuzione prima che si verifichi l'arresto anomalo.Quindi, spostando la posizione del Throw, posso individuare l'area del codice che causa il problema.A volte ho fatto qualcosa di chiaramente stupido, altre volte potrebbero trattarsi di un paio di errori che, insieme, sono catastrofici.
Ecco un esempio.Viene creata una finestra modale con un gestore per l'evento validate: il gestore restituisce 1 o 0 indicando se la finestra deve chiudersi o meno quando si fa clic su OK:
Nuova finestra ( "Test" , << Modale ,
<< In Convalida (
TXT = Ordinare ( teb << Ottieni testo ) ;
Se ( Lunghezza ( TXT ) > 0 ,
è valido = 1
,
è valido = 0
) ;
// ritorno
è valido
) ,
Casella di formazione ( NCol ( 1 ) , Spaziatura ( 10 ) ,
Casella di testo ( "Inserisci qualcosa, qualsiasi cosa, ma qualcosa:" ) ,
teb = Casella di modifica del testo ( "" )
)
)
Funziona bene, puoi eseguirlo senza mandare in crash JMP!Quando scriviamo una funzione o un gestore di eventi, l'ultima cosa valutata è ciò che viene restituito (vedi Colla per capire perché).Ma a un certo punto JMP ha introdotto una funzione Return che rende il "returning" più esplicito: funziona con le funzioni ma non con i gestori di eventi come sopra.Quindi sostituire isValid con Return(isValid) nell'ultima riga di OnValidate non funzionerà.Ma JMP non si bloccherà.Ma se dovessi utilizzare erroneamente l'evento OnClose, JMP non sarà soddisfatto e mi darà una violazione di accesso:
// non provarlo a casa
Nuova finestra ( "Test" , << Modale ,
<< Alla chiusura (
TXT = Ordinare ( teb << Ottieni testo ) ;
Se ( Lunghezza ( TXT ) > 0 ,
è valido = 1
,
è valido = 0
) ;
Ritorno (è valido)
) ,
Casella di formazione ( NCol ( 1 ) , Spaziatura ( 10 ) ,
Casella di testo ( "Inserisci qualcosa, qualsiasi cosa, ma qualcosa:" ) ,
teb = Casella di modifica del testo ( "" )
)
)
Ri: Violazione dell'accesso a JMP: cause probabili?Ho avuto lo stesso problema due volte in un'ora.