Violation d'accès JMP – Causes probables ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />S'il est possible de répondre à cette question - et bien sûr, ce n'est peut-être pas le cas - quelles sont les causes probables d'un message d'erreur fatal indiquant que "JMP a effectué une violation d'accès et va se fermer", s'il vous plaît ?Par exemple, dois-je faire attention à toute tentative d'écriture de données dans une table verrouillée, ou quelque chose comme ça ?
J'ai rencontré ce problème de temps en temps au cours de divers exercices de script au fil des ans, et je n'ai jamais vraiment réussi à en déterminer la raison.Habituellement, j'arrive à isoler le bloc de script dans lequel l'erreur fatale se produit évidemment, et je le réécris simplement d'une manière différente, après quoi le problème disparaît.Au fur et à mesure que mes scripts se sont améliorés au fil du temps, j'ai rencontré de moins en moins de problèmes de ce type, mais j'en ai toujours un de temps en temps - et j'en regarde un en ce moment au milieu d'un script assez complexe et je me demande par où commencer. Y a-t-il des causes probables que je devrais rechercher, ou des constructions de script douteuses susceptibles de générer une telle erreur ?
Merci beaucoup
Re : Violation d'accès JMP – Causes probables ?Oui, j'ai compris que si vous avez un type de données (par exemple caractère, numérique, etc.) qui doit tous être mélangés dans des colonnes différentes, vous pourriez rencontrer cette violation, en particulier lorsque vous traitez de grandes sommes de données. Dans mon cas, quelques lignes de ma table se chevauchaient légèrement, j'avais donc des variables numériques qui auraient dû être dans la colonne spécifique avec ce nom de variable dans une colonne qui avait un type de données caractère. J'ai compris cela en parcourant attentivement le tableau de données après que le support technique JMP ait identifié de près les lignes du tableau de données à l'origine du problème. Au départ, ils supposaient qu'il s'agissait d'un bug du système, mais je comprends que cela s'est produit parce que certaines variables (comme décrit précédemment) se chevauchaient légèrement à partir des 331 670 lignes de la table de données avec laquelle je travaillais lorsque le crash/violation d'accès s'est produit. Je vous suggère de vous assurer soigneusement que chaque variable se trouve correctement dans la même colonne avec le type de données et le type de modélisation identiques pour chacune des colonnes. Autrement dit, vous ne devriez pas avoir de variable de caractère dans une colonne de variable numérique. Même si parfois nous utilisons une variable numérique comme caractère dans le cas du code postal. Mais je pense que vous avez compris l'idée. Au moins dans mon cas, cela semble être le problème. Je l'ai résolu en rechargeant simplement le fichier texte original et en formatant à nouveau les données.
Re : Violation d'accès JMP – Causes probables ?Merci Dan d'avoir suggéré, je viens de le déposer.
Re : Violation d'accès JMP – Causes probables ?Si vous disposez d'un script illustrant le crash, envoyez-le à Assistance technique JMP .
Re : Violation d'accès JMP – Causes probables ?Le problème que vous signalez a été résolu pour une version ultérieure.Veuillez signaler ces problèmes au support technique lorsque vous les rencontrez. Nous essayons de résoudre les plantages dès que possible et pouvons souvent vous aider à contourner le problème sous-jacent.
Re : Violation d'accès JMP – Causes probables ?Le problème était associé à l'entrée d'un fichier texte dont les dernières lignes contenaient des données de caractères dans des colonnes contenant des données numériques. Le tableau comportait plus de 291 000 000 lignes et ces données légèrement mal placées se trouvaient dans les dernières (4) lignes du tableau de données. Je les ai corrigés et cela a bien fonctionné et j'ai à nouveau eu le problème. Le support technique JMP a fourni la ligne exacte où le problème pensait s'être produit, mais après avoir réexaminé les données, j'ai découvert que les données textuelles saisies contenaient quelques données légèrement égarées dans les mauvais champs.
Re : Violation d'accès JMP – Causes probables ?Merci pour les contributions. Je pense que dans ce cas, le problème n'était en aucun cas associé au fait qu'un code était bon ou mauvais.
Re : Violation d'accès JMP – Causes probables ?JMP vous permet d'envoyer plusieurs messages sur une seule ligne de code, mais cela ne sert à rien - c'est moche, a une signification ambiguë et rend le débogage impossible.Alors peut-être que les crashs de JMP ne sont qu'un rappel pour nous d'essayer d'écrire du code décent !
Re : Violation d'accès JMP – Causes probables ?j'ai également rencontré ce problème. dans mon cas, il était très difficile d'en détecter la cause puisque l'ensemble du script était une grosse boucle et qu'il ne plantait qu'après 20 ou 30 exécutions individuelles. et c'était après avoir rendu le script aussi robuste que possible. à la fin, j'ai découvert que si je mentionne les objets à chaque fois, le programme ne plante pas.
Par exemple:
ne fais pas ça -
| dt10i << aller à ( : Durée de l'événement ) << Déplacer les colonnes sélectionnées ( Après ( « Date de l'événement » ) ) << aller à ( 2 ) << Effacer la sélection de colonne ; |
faites ceci à la place :
| dt10i << aller à( :Durée ); |
dt10i << Déplacer les colonnes sélectionnées (Après (« Date » ) );
dt10i << aller à( 2 );
dt10i << Effacer la sélection de la colonne ;
Je n'ai pas trouvé ce problème documenté et je suis sûr de l'avoir isolé et c'est la cause du crash du programme dans mon cas.
Re : Violation d'accès JMP – Causes probables ?Une violation d'accès peut se produire à chaque fois qu'une opération de mémoire non valide se produit. Je ne suis pas sûr d'avoir vu un modèle particulier, mais JMP semble incroyablement robuste pour les opérations de table, c'est donc probablement le dernier endroit où je regarderais.Le problème bien sûr s’il est difficile et fastidieux de diagnostiquer l’emplacement du problème.Je place généralement un Throw() dans mon code pour essayer d'interrompre l'exécution avant que le crash ne se produise.Ensuite, en déplaçant la position du Throw, je peux me concentrer sur la zone de code à l'origine du problème.Parfois, j'ai fait quelque chose de clairement stupide, d'autres fois, il peut s'agir de quelques erreurs qui, combinées, sont catastrophiques.
Voici un exemple.Une fenêtre modale est créée avec un gestionnaire pour l'événement validate - le gestionnaire renvoie 1 ou 0 indiquant si la fenêtre doit se fermer ou non lorsque vous cliquez sur OK :
Nouvelle fenetre ( "Test" , << Modal ,
<< Sur validation (
SMS = Garniture ( teb << Obtenir du texte ) ;
Si ( Longueur ( SMS ) > 0 ,
est valable = 1
,
est valable = 0
) ;
// retour
est valable
) ,
Boîte de programmation ( sous-officier ( 1 ) , Espacement ( dix ) ,
Zone de texte ( "Entrez quelque chose, n'importe quoi, mais quelque chose :" ) ,
teb = Zone d'édition de texte ( "" )
)
)
Cela fonctionne très bien, vous pouvez l'exécuter sans planter JMP !Lorsque nous écrivons une fonction ou un gestionnaire d'événements, la dernière chose évaluée est ce qui est renvoyé (voir Glue pour comprendre pourquoi).Mais à un moment donné, JMP a introduit une fonction Return qui rend le "retour" plus explicite - elle fonctionne avec des fonctions mais pas avec des gestionnaires d'événements comme ci-dessus.Donc remplacer isValid par Return(isValid) dans la dernière ligne de OnValidate ne fonctionnera pas.Mais JMP ne plantera pas.Mais si j'utilisais par erreur l'événement OnClose, JMP serait mécontent et me donnerait une violation d'accès :
// N'essayez pas ca a la maison
Nouvelle fenetre ( "Test" , << Modal ,
<< À la fermeture (
SMS = Garniture ( teb << Obtenir du texte ) ;
Si ( Longueur ( SMS ) > 0 ,
est valable = 1
,
est valable = 0
) ;
Retour (est valable)
) ,
Boîte de programmation ( sous-officier ( 1 ) , Espacement ( dix ) ,
Zone de texte ( "Entrez quelque chose, n'importe quoi, mais quelque chose :" ) ,
teb = Zone d'édition de texte ( "" )
)
)
Re : Violation d'accès JMP – Causes probables ?J'ai eu ce même problème deux fois en une heure.