Я не вижу много функций в вашем коде, поэтому, скорее всего, нет трассировки стека для печати. См. предыдущий ответ здесь: Печать трассировки стека
Сегодня мне пришло в голову, что вероятная проблема заключается в том, что OCAMLRUNPARAM на самом деле не установлен в вашем процессе. Может быть сложно заставить переменные окружения передаваться через команды make(1). Одна из причин заключается в том, что каждая строка в Makefile выполняется отдельной оболочкой.
Еще одна вещь, влияющая на обратные трассировки, — это встраивание. Если ваши функции сложны, это, вероятно, не влияет на вас. Но вы можете отключить почти все встраивания с помощью -inline 0
. Маловероятно, что это будет иметь значение между отсутствием трассировки стека и трассировкой стека. Это может иметь значение между более короткими и более длинными трассировками стека.
Вот эксперимент, в котором встраивание имеет значение:
$ cat m.ml
try
let f () : int = raise Exit
in let g () = f () + 2
in let h () = g () + 3
in let main () = Printf.printf "%d\n" (h () + 4)
in main ()
with
e -> Printf.printf "%s" (Printexc.get_backtrace ())
$ ocamlopt -inline 10 -g -o m m.ml
$ OCAMLRUNPARAM=b m
Raised by primitive operation at file "m.ml", line 3, characters 18-22
$ ocamlopt -inline 0 -g -o m m.ml
$ OCAMLRUNPARAM=b m
Raised at file "m.ml", line 2, characters 27-31
Called from file "m.ml", line 3, characters 18-22
Called from file "m.ml", line 4, characters 18-22
Called from file "m.ml", line 5, characters 43-47
Called from file "m.ml", line 6, characters 7-14
person
Jeffrey Scofield
schedule
24.08.2013