Does SMLNJ have any sort of debugger?

后端 未结 4 1939
梦如初夏
梦如初夏 2021-02-07 05:38

I have looked through the SMLNJ User Guide and can\'t find anything about debugging capabilities. I\'d love to just see a stack trace, or step through a function. Is this possib

相关标签:
4条回答
  • 2021-02-07 06:07

    From section 3.3 of the SMLNJ faq:

    Q: Is there a debugger for SML/NJ? What ever happened to Tolmach's debugger for SML/NJ 0.93?

    A: The short answer is 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
    

    There's a .NET compiler, though, which claims to have some debugging support..

    0 讨论(0)
  • 2021-02-07 06:10

    Poly/ML is the best unknown implementation of Standard ML. It had a command-line debugger from early on (at least the 1990s). Recently, it has acquired full IDE support via Isabelle/PIDE, e.g. see ML, which also includes a source-level debugger.

    0 讨论(0)
  • 2021-02-07 06:15

    There's currently no step-based debugger.

    You can get stack backtraces by doing the following:

    - 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
    -
    

    Then, you can load some code and instead of just printing the exception, you'll get a simulated stack backtrace. You do have to recompile your code after following the above steps, or this won't work!

    - 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
    -
    
    0 讨论(0)
  • 2021-02-07 06:20

    There is now a source level debugger in PolyML: http://www.polyml.org/documentation/Tutorials/Debugging.html

    0 讨论(0)
提交回复
热议问题