2009-04-18 36 views
16

Tôi đã xem qua SMLNJ User Guide và không thể tìm thấy bất kỳ điều gì về khả năng gỡ lỗi. Tôi rất thích chỉ nhìn thấy một dấu vết ngăn xếp, hoặc bước qua một chức năng. Điều này có thể. Có các triển khai khác cho các biến thể tương tự của SML mà làm cung cấp tính năng này không?SMLNJ có bất kỳ loại trình gỡ lỗi nào không?

Trả lời

8

Từ phần 3.3 của SMLNJ faq:

Q: Có một trình gỡ lỗi cho SML/NJ? Điều gì đã từng xảy ra với trình gỡ lỗi của Tolmach cho SML/NJ 0.93?

A: Câu trả lời ngắn gọn là không.

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, tuy nhiên, trong đó tuyên bố có một số hỗ trợ gỡ lỗi ..

10

Hiện tại không có debugger bước dựa trên.

Bạn có thể lấy chồng vết lùi bằng cách làm như sau:

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

Sau đó, bạn có thể tải một số mã và thay vì chỉ in ngoại lệ, bạn sẽ nhận được một chồng backtrace mô phỏng. Bạn phải biên dịch lại mã của bạn sau khi làm theo các bước trên, hoặc điều này sẽ không hoạt động!

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

Poly/ML là việc thực hiện chưa được biết tốt nhất của Standard ML. Nó có một trình gỡ rối dòng lệnh từ rất sớm (ít nhất là những năm 1990). Gần đây, nó đã nhận được hỗ trợ IDE đầy đủ thông qua Isabelle/PIDE, ví dụ: xem ML, cũng bao gồm trình gỡ rối cấp nguồn.

Các vấn đề liên quan