Есть ли в SMLNJ какой-либо отладчик?

Используйте эту строку ниже, вместо функции header().

echo "<script>window.top.location = 'https://apps.facebook.com/yourappnamespace/';</script>";
16
задан Kai 18 April 2009 в 22:29
поделиться

2 ответа

Из раздела 3.3 faq SMLNJ :

В: Есть ли отладчик для SML / NJ? Что случилось с Толмачем отладчик для SML / NJ 0,93?

A: Краткий ответ - нет.

Также:

 Отладка SML 

 * В течение многих лет ни у кого не было отладчика SML

 * Почему?
 o Ни у кого не было ошибок?
 Сложно написать отладчик для SML
 o Сообщество пользователей не было достаточно большим

 * Скорее всего, все три верны

Однако есть компилятор .NET , который утверждает, что имеет некоторую поддержку отладки ..

8
ответ дан 30 November 2019 в 12:27
поделиться

В настоящее время нет пошагового отладчика.

Вы можете получить трассировку стека, выполнив следующие действия:

- 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
-
12
ответ дан 30 November 2019 в 12:27
поделиться