SMLNJ有没有任何类型的调试器?

时间:2009-04-18 22:29:58

标签: smlnj

我查看了SMLNJ User Guide,但找不到任何有关调试功能的信息。我很想看到一个堆栈跟踪,或者通过一个函数。这可能吗。是否存在提供此功能的SML的类似变体的其他实现?

4 个答案:

答案 0 :(得分:12)

目前没有基于步骤的调试器。

您可以通过执行以下操作来获取堆栈回溯:

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

然后,您可以加载一些代码而不是仅打印异常,您将获得模拟堆栈回溯。您必须在执行上述步骤后重新编译代码,否则这将无效!

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

答案 1 :(得分:8)

来自SMLNJ faq的第3.3节:

  

问:是否有SML / NJ的调试器?   Tolmach发生了什么事   调试器为SML / NJ 0.93?

     答:答案很简短。

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

但是a .NET compiler声称有一些调试支持..

答案 2 :(得分:7)

PolyML中现在有一个源代码级调试器:http://www.polyml.org/documentation/Tutorials/Debugging.html

答案 3 :(得分:2)

Poly/ML是标准ML的最佳未知实现。从早期开始(至少在20世纪90年代),它有一个命令行调试器。最近,它通过Isabelle / PIDE获得了完整的IDE支持,例如请参阅ML,其中还包含源级调试程序。