5 razones por las que amo al nuevo JSL DebuggerAsí es, JMP 10 se envía con un nuevo depurador JSL. ¡Diga adiós a lo viejo y hola a lo nuevo! Mientras me preguntaba qué podría decir en una publicación de blog al respecto, comencé a pensar en formas en que hace mi vida más fácil como programador de JSL. Esta publicación presenta algunas características maravillosas, y las publicaciones posteriores ampliarán los detalles.
La guía de secuencias de comandos de JSL tiene una descripción completa del depurador de JSL, junto con algunos ejemplos sencillos para comenzar. Mientras tanto, aquí hay algunas cosas que esperar.
5. ¡Funciona!
Puede que sea un poco duro, pero encontré que nuestro Depurador JSL anterior tenía funciones tan limitadas y me resultó difícil de usar, nunca lo usé. Ahora me encuentro abandonando mis viejos hábitos de rociar generosamente mi código con Show () s, Print () s y Write () s, y en su lugar me dirijo al nuevo depurador. Lo que tiene la ventaja añadida de no liberar mi script a los compañeros de trabajo solo para encontrar que olvidé comentar o eliminar varios Show () s.
Como bono adicional, no tiene que agregar / * debug step * / en la parte superior de su script para depurarlo. Puede hacer clic en el botón de la barra de herramientas Debug Script (
) para su script: está justo al lado del botón Ejecutar script. O seleccione Editar> Depurar script. O haga clic con el botón derecho en la ventana del script y seleccione Debug Script. O presione CONTROL-SHIFT-R (COMMAND-SHIFT-R en Macintosh). ¡Fácil!
4. Está disponible en Macintosh, también

¡Oh dia feliz! ¡Ahora puedo depurar los scripts JSL en Macintosh así como en Windows! El depurador es el mismo en ambas plataformas. Las mismas grandes características, la misma gran funcionalidad. Sé que mis compañeros entusiastas de Macintosh agradecerán esto, ya que el viejo y cansado depurador ni siquiera estaba disponible en Macintosh.
3. Depuración de bucles y funciones escritas por el usuario
Los días de seleccionar pequeños fragmentos de código en sus bucles y ejecutarlos poco a poco (mientras se intenta no seleccionar la coma que resultó en un error de JSL) han terminado. Puedo escuchar los vítores desde aquí. A medida que ejecuta su código a través del depurador, puede ver que el valor de su variable de iteración se actualiza automáticamente cada vez que cambia. Puede usar puntos de interrupción para evitar los fragmentos que sabe que están funcionando. Puede agregar una condición a un punto de interrupción y ejecutar las primeras 200 iteraciones con un solo clic, y luego concentrarse en dónde comienza su problema en el 201 S t iteración.
Depurar tus funciones también es más fácil. Ya no tiene que declarar por separado cualesquiera que sean sus variables "aprobadas", y luego ejecutar partes de la función. Simplemente puede ejecutar el script para la función y entrar en él. El depurador le muestra todos los valores de las variables que pasa y los que son locales a la función.
2. Paso a paso, sobre y fuera de los bloques de código
¿Ya sabes que la expresión que estás llamando es impecable? Haga clic en Paso a paso en el depurador para ejecutar la expresión con un clic y detenerse en la siguiente expresión. ¿Estás seguro de que algo va mal en tu función? Haga clic en Paso a paso para ingresar a la función y ejecutar cada expresión una a la vez dentro de la función. ¿Está a mitad de camino paso a paso a través de un archivo Include () y se da cuenta de que su problema no está aquí? Haga clic en Salir para terminar de ejecutar el resto de la secuencia de comandos incluida y vuelva a depurar la expresión que sigue a Incluir ().
1. Observando Variables
Esto fue lo único que hizo el viejo depurador, pero fue difícil de usar y limitado. La observación de variables es una delicia para el nuevo depurador. Los valores de cada variable individual se muestran en cualquier ámbito existente: global, local, aquí, espacios de nombres. No necesitas hacer nada: siempre está ahí. A medida que se agregan nuevas variables en su código, se agregan a la lista apropiada. Agregue un nuevo espacio de nombres y aparecerá una nueva lista.
Si escribe scripts largos que usan docenas de variables, esas listas pueden ser abrumadoras. Así que voltea a la pestaña de Reloj.
Puede agregar solo las pocas variables que desea vigilar.Si desea ver cómo se agregan valores a una lista JSL particular, puede hacer un subíndice (por ejemplo, puede ver mylist). ). Puede acceder a la lista de observación (por ejemplo, puede ver aquí: var y global: var al mismo tiempo).Puede escribir el nombre de su variable en la lista de observación, pero es aún más fácil hacer clic derecho en el nombre de la variable en el panel de secuencias de comandos del depurador y seleccionar Agregar vigilancia.Manténganse al tanto...
Mire este espacio para ver más publicaciones en el depurador, donde analizaré las características particulares y los casos de uso en detalle. ¿Interesado en un tema particular del depurador? Mencione esto en los comentarios e intentaré abordarlo en una publicación futura.
Dewey escribió: Ð xcellennt Ñ ost. Estaré tratando con ma ... Dewey escribió:
Ð xcellennt Ñ ost. Voy a tratar con muchos de estos
problemas también ...
John Sall ofrece reflexiones sobre JMP 10, escribió: [...] inves ... John Sall ofrece reflexiones sobre JMP 10. escribió:
[...] invirtiendo en escritura de scripts, y JMP 10 tiene muchas características nuevas que ofrecer en esa área. Tiene un nuevo JSL Debugger, soporte de pantalla dividida para el registro JMP, edición de arrastrar y soltar, construcción mejorada de complementos y un [...]
Melanie Drake escribió: ¿Ejecutas tus scripts uno por uno, ... Melanie Drake escribió:
¿Ejecuta sus scripts uno por uno, iniciando JMP y saliendo de JMP para cada uno, o inicia JMP una vez y ejecuta sus scripts como se incluye? En el primer caso, (una instancia por script), el show () aparece en el registro para mí. En el segundo, la secuencia de comandos del contenedor sale de JMP, por lo que nunca se ve nada. Un colega sugirió usar una captura de registro en cada script y guardar la captura de registro como un archivo de texto que puede ver más adelante. Tengo un enfoque alternativo a continuación.
Los mensajes de error no han cambiado mucho.
Creo que si envía referencias de columna erróneas a una plataforma, su secuencia de comandos fallará allí y no podrá acceder a la tabla de secuencias de comandos (plat). Puede usar un Try () para omitir todo si las referencias de la columna son malas. Por ejemplo:
Pruebe (plt = bivariate (x (: nonexistent_column), y (: nonexistent_column_2));
Plt << hacer algo;
// hacer más cosas
, // de lo contrario, si alguna de las expresiones anteriores falla, haz esto en su lugar
Guardar archivo de texto ("c: / error log.txt",
"c: \ ben's script.jsl: error en el primer caso bivariado",
modo ("añadir")
)
);
Tenga en cuenta que primero tendría que crear el archivo de texto, antes de poder adjuntarlo. Un enfoque como este podría ayudar a mitigar su primer problema también.
Gracias por sus preguntas interesantes!
Ben escribió: Pregunta rápida: ejecuto un montón de scripts a través de ... Ben escribió:
Pregunta rápida: ejecuto un montón de scripts a través de la línea de comandos. JMP 8 o 9 introdujo una nueva "característica" mediante la cual hacer eso hace que el script se ejecute, pero no aparece. Entonces, si un script que lanzo a través de la línea de comandos barfs, ¿aparecerá ahora como lo hizo en 6? En el 9 estoy teniendo problemas como entrar por la mañana a una ventana JMP pegada con "N col (dtab) - dtab no es una referencia de tabla de datos" y una pequeña idea de qué script invocó N col (dtab). He intentado agregar "show (" launching c: \ ben's script.jsl ")" pero eso NUNCA parece aparecer cuando esto sucede.
Además, es útil para la depuración, la configuración predeterminada cuando solo se ejecuta un script, ¿JMP todavía escupe?
"Columna no encontrada en argumento erróneo (x)"
?
('x' a veces aparece como un número)
Tener algo como
"usted solicitó la columna 'Bens_column_name" fuera de la tabla "Bens_target_data_table" en la línea de código 1234 donde dijo' eval (Bens_column_list_variable) 'pero no hay tal columna "
Es un error mucho más útil.
Además, no creo que esto sea automáticamente fatal, y con frecuencia el no lanzar un error por "columna incorrecta" es problemático; por lo general, una declaración de "captura" debe aparecer en algún lugar:
plt = bivariate (x (: nonexistent_column), y (: nonexistent_column_2));
Plt << hacer algo;
Si quiero que esto solo salte las columnas malas, voy a necesitar un
IsScriptable (plt);
de todas formas.
Gracias.
Jenny M escribió: ¡Rock, Mel! Jenny m escribió:
¡Tú rockeras Mel!
Lee Creighton escribió: Me encantaría una demostración que muestre variab local ... Lee Creighton escribió:
Me encantaría una demostración que muestre las variables locales en el depurador.