Infracción de acceso a JMP: ¿causas probables?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Si es posible responder a esta pregunta (y, por supuesto, puede que no lo sea), ¿cuáles son las causas probables de un mensaje de error fatal que indica que "JMP ha cometido una infracción de acceso y se cerrará", por favor?Por ejemplo, ¿debería estar atento a un intento de escribir datos en una tabla que está bloqueada o algo así?
Me he topado con este problema de vez en cuando durante diversos ejercicios de programación a lo largo de los años, y nunca logré precisar el motivo.Normalmente logro aislar el bloque de script dentro del cual evidentemente ocurre el error fatal y simplemente lo reescribo de otra manera, después de lo cual el problema desaparece.A medida que mis secuencias de comandos han mejorado con el tiempo, he encontrado cada vez menos problemas de este tipo, pero todavía tengo uno de vez en cuando, y estoy mirando uno ahora mismo en medio de una secuencia de comandos bastante compleja y me pregunto por dónde empezar. ¿Existe alguna causa probable que debería tener en cuenta o alguna construcción de script dudosa que pueda generar dicho error?
Muchas gracias
Re: Infracción de acceso a JMP: ¿causas probables?Sí, descubrí que si tiene tipos de datos (por ejemplo, caracteres, numéricos, etc.) que deberían estar mezclados en diferentes columnas, podría encontrarse con esta infracción, especialmente cuando se trata de grandes sumas de datos. En mi caso, algunas filas de mi tabla se superponían ligeramente, por lo tanto, tenía variables numéricas que deberían haber estado en la columna específica con ese nombre de variable en una columna que tenía un tipo de datos de carácter. Lo descubrí mirando detenidamente la tabla de datos después de que el soporte técnico de JMP identificara de cerca qué filas en la tabla de datos causaban el problema. Inicialmente, asumieron que era un error del sistema, pero descubrí que eso sucedió porque algunas variables (como se describió anteriormente) se superpusieron ligeramente a partir de las 331,670 filas de la tabla de datos con la que estaba trabajando cuando ocurrió la falla/infracción de acceso. Le sugiero que se asegure cuidadosamente de que cada variable esté apropiadamente en la misma columna con el tipo de datos y el tipo de modelado iguales para cada una de las columnas. Es decir, no debería tener una variable de carácter en una columna de variable numérica. Aunque a veces usamos variable numérica como carácter en el caso del Código Postal. Pero creo que entendiste la idea. Al menos en mi caso ese parece ser el problema. Lo resolví simplemente recargando el archivo de texto original y formateando los datos nuevamente.
Re: Infracción de acceso a JMP: ¿causas probables?Gracias Dan por sugerirlo, lo acabo de presentar.
Re: Infracción de acceso a JMP: ¿causas probables?Si tiene un script que demuestra el fallo, envíelo a Soporte técnico JMP .
Re: Infracción de acceso a JMP: ¿causas probables?El problema que usted informa se ha solucionado para una versión futura.Informe estos problemas al soporte técnico cuando los vea; intentamos solucionar los fallos lo antes posible y, a menudo, podemos ayudarle a solucionar el problema subyacente.
Re: Infracción de acceso a JMP: ¿causas probables?El problema estaba asociado con la entrada de un archivo de texto que en las últimas filas tenía datos de caracteres en columnas con datos numéricos. La tabla tenía más de 291.000.000 filas y esos datos ligeramente fuera de lugar estaban en las últimas (4) filas de la tabla de datos. Los corregí y funcionó bien y he vuelto a tener el problema. El soporte técnico de JMP proporcionó la fila exacta donde pensaban que ocurría el problema, pero después de volver a examinar los datos descubrí que los datos del texto de entrada tenían algunos datos ligeramente fuera de lugar en los campos incorrectos.
Re: Infracción de acceso a JMP: ¿causas probables?Gracias por los aportes. Creo que en el caso el problema no estaba asociado de ninguna manera con si un código era bueno o malo.
Re: Infracción de acceso a JMP: ¿causas probables?JMP le permite enviar varios mensajes en 1 línea de código, pero no tiene sentido hacerlo: es feo, tiene un significado ambiguo y hace imposible la depuración.Así que tal vez los fallos de JMP sean sólo un recordatorio para que intentemos escribir un código decente.
Re: Infracción de acceso a JMP: ¿causas probables?También me encontré con este problema. en mi caso fue muy difícil detectar la causa ya que todo el script era un gran bucle y fallaba solo después de 20 o 30 ejecuciones individuales. Y esto fue después de que hice el guión lo más sólido posible. Al final descubrí que si menciono los objetos cada vez, el programa no falla.
Por ejemplo:
no hagas esto -
| dt10i << ir a(:Duración del evento) << Mover columnas seleccionadas( Después( “Fecha del evento”) ) << ir a( 2 ) << Borrar selección de columna; |
haz esto en su lugar:
| dt10i << ir a(:Duración); |
dt10i << Mover columnas seleccionadas( Después( “Fecha” ) );
dt10i << ir a (2);
dt10i << Borrar selección de columna;
No encontré este problema documentado, pero estoy seguro de que lo aislé y fue la causa del bloqueo del programa en mi caso.
Re: Infracción de acceso a JMP: ¿causas probables?Puede ocurrir una violación de acceso cada vez que ocurre una operación de memoria no válida, no estoy seguro de haber visto ningún patrón en particular, pero JMP parece increíblemente robusto para las operaciones de tabla, por lo que probablemente ese sea el último lugar donde buscaría.El problema, por supuesto, es que es difícil y tedioso diagnosticar la ubicación del problema.Normalmente coloco un Throw() en mi código para intentar cancelar la ejecución antes de que ocurra el bloqueo.Luego, al mover la posición de Throw, puedo concentrarme en el área de código que está causando el problema.A veces he hecho algo claramente estúpido, otras veces pueden ser un par de errores que combinados son catastróficos.
Aquí hay un ejemplo.Se crea una ventana modal con un controlador para el evento de validación: el controlador devuelve 1 o 0, lo que indica si la ventana debe cerrarse o no cuando se hace clic en Aceptar:
Nueva ventana ( "Prueba" , << Modal ,
<< Al validar (
TXT = Recortar ( teb << Obtener texto ) ;
Si ( Longitud ( TXT ) > 0 ,
es válida = 1
,
es válida = 0
) ;
// devolver
es válida
) ,
Cuadro de alineación ( NCol ( 1 ) , Espaciado ( 10 ) ,
Caja de texto ( "Ingrese algo, cualquier cosa, menos algo:" ) ,
teb = Cuadro de edición de texto ( "" )
)
)
¡Esto funciona bien, puedes ejecutarlo sin que JMP se bloquee!Cuando escribimos una función o un controlador de eventos, lo último que se evalúa es lo que se devuelve (consulte Glue para comprender por qué).Pero en algún momento JMP introdujo una función de retorno que hace que el "regreso" sea más explícito: funciona con funciones pero no con controladores de eventos como el anterior.Por lo tanto, reemplazar isValid con Return(isValid) en la última línea de OnValidate no funcionará.Pero JMP no fallará.Pero si utilizara por error el evento OnClose, JMP no estaría satisfecho y me daría una infracción de acceso:
// No intentes esto en casa
Nueva ventana ( "Prueba" , << Modal ,
<< Al cerrar (
TXT = Recortar ( teb << Obtener texto ) ;
Si ( Longitud ( TXT ) > 0 ,
es válida = 1
,
es válida = 0
) ;
Devolver (es válida)
) ,
Cuadro de alineación ( NCol ( 1 ) , Espaciado ( 10 ) ,
Caja de texto ( "Ingrese algo, cualquier cosa, menos algo:" ) ,
teb = Cuadro de edición de texto ( "" )
)
)
Re: Infracción de acceso a JMP: ¿causas probables?Tuve este mismo problema dos veces en una hora.