smlnj

¿SMLNJ tiene algún tipo de depurador?



(4)

Actualmente no hay un depurador basado en pasos.

Puede obtener backtraces de pila haciendo lo siguiente:

- CM.make "$smlnj-tdp/back-trace.cm"; [library $smlnj-tdp/back-trace.cm is stable] [library $smlnj-tdp/plugins.cm is stable] [library $SMLNJ-LIB/Util/smlnj-lib.cm is stable] [library $smlnj/compiler/current.cm is stable] [library $smlnj/compiler/x86.cm is stable] [library $smlnj/viscomp/core.cm is stable] [library $smlnj/viscomp/parser.cm is stable] [library $smlnj/viscomp/basics.cm is stable] [library $smlnj/viscomp/elaborate.cm is stable] [library $smlnj/viscomp/elabdata.cm is stable] [library $smlnj/MLRISC/MLRISC.cm is stable] [library $SMLNJ-MLRISC/MLRISC.cm is stable] [library $Lib.cm(=$SMLNJ-MLRISC)/Lib.cm is stable] [library $Control.cm(=$SMLNJ-MLRISC)/Control.cm is stable] [library $Graphs.cm(=$SMLNJ-MLRISC)/Graphs.cm is stable] [library $smlnj/MLRISC/Control.cm is stable] [library $smlnj/viscomp/debugprof.cm is stable] [library $smlnj/viscomp/execute.cm is stable] [library $smlnj/internal/smlnj-version.cm is stable] [library $smlnj/viscomp/x86.cm is stable] [New bindings added.] val it = true : bool - SMLofNJ.Internals.TDP.mode := true; [autoloading] [autoloading done] val it = () : unit -

Luego, puede cargar algo de código y, en lugar de solo imprimir la excepción, obtendrá un seguimiento simulado de pila. ¡Tienes que recompilar tu código después de seguir los pasos anteriores, o esto no funcionará!

- exception Foo; exception Foo - fun otherFun() = raise Foo; val otherFun = fn : unit -> ''a - fun raiseAtZero(n) = if (n > 0) then raiseAtZero(n-1) else otherFun(); val raiseAtZero = fn : int -> ''a - raiseAtZero 10; stdIn:9.1-9.15 Warning: type vars not generalized because of value restriction are instantiated to dummy types (X1,X2,...) *** BACK-TRACE *** GOTO stdIn:7.5-7.27: otherFun[2] (from: stdIn:8.60-8.70: raiseAtZero[2]) CALL-( stdIn:8.5-8.70: raiseAtZero[2] (from: stdIn:9.1-9.15: it) GOTO stdIn:5.5-5.27: otherFun[2] (from: stdIn:6.60-6.70: raiseAtZero[2]) CALL-( stdIn:6.5-6.70: raiseAtZero[2] (from: stdIn:6.71-6.86: it) uncaught exception Foo raised at: stdIn:7.24-7.27 -

He revisado la Guía del usuario de SMLNJ y no puedo encontrar nada sobre las capacidades de depuración. Me encantaría simplemente ver un rastro de pila, o pasar por una función. Es posible. ¿Existen otras implementaciones para variantes similares de SML que proporcionen esta característica?



De la sección 3.3 de las preguntas frecuentes de SMLNJ :

P: ¿Hay un depurador para SML / NJ? ¿Qué pasó con el depurador de Tolmach para SML / NJ 0.93?

A: La respuesta corta es no.

Also:

Debugging SML * For years, no one had an SML debugger * Why? o No one had any bugs? o It is hard to write a debugger for SML o The user community wasn’t large enough * Likely all three are true

Sin embargo, hay un compilador .NET que afirma tener algún soporte de depuración.


Poly / ML es la mejor aplicación desconocida de Standard ML. Tenía un depurador de línea de comandos desde el principio (al menos en la década de 1990). Recientemente, ha adquirido soporte completo de IDE a través de Isabelle / PIDE, por ejemplo, ver ML , que también incluye un depurador de nivel de fuente.