如果您要求恰到好处,Objective Caml 语言只会生成堆栈跟踪 - 字节码和本机代码的要求是什么?
Thelema
问问题
10004 次
5 回答
44
使用 -g 编译并设置环境变量 OCAMLRUNPARAM=b
于 2008-09-28T13:56:53.430 回答
10
一些Printexc函数允许您以编程方式执行此操作。
于 2010-02-01T15:05:16.980 回答
3
因为看起来您只能在 unix 上获取异常跟踪,所以您可以在第二个进程中分叉并抛出异常。这样主进程可以继续:
export OCAMLRUNPARAM=b
# compile with -g
flush_all(); let r = Unix.fork() in if r == 0 then raise Exit
于 2013-06-23T00:54:04.943 回答
2
如果您使用 Ocamlbuild 而不是直接调用编译器,则可以使用该debug
标记。从手册:
使用 OCamlbuild,您可以简单地将调试标记添加到程序的目标中,它会整理出何时插入 -g 标志。
例如,如果您正在foo.ml
使用 package构建文件,bar
那么您的_tags
文件将有一行:
<foo.ml>: package(bar), debug
-g
这将在构建字节码/本机文件时插入适当的标志。但是,您仍然需要使用export OCAMLRUNPARAM=b
其他答案中提到的设置环境变量。
于 2017-07-30T03:23:25.700 回答
0
如其他答案所述,您需要使用调试信息编译项目并使用OCAMLRUNPARAM=b
环境变量运行它。
让 Ocamlbuild 编译带有调试信息但不编辑_tags
文件的整个项目的一种便捷方法是指定一个特殊的调试目标。从手册:
编译适合调试
ocamldebug
或分析本机代码的代码的首选方法ocamlprof
是使用适当的目标扩展,.d.byte
用于调试或.p.native
.
我使用这种技术在命令行上快速编译运行周期。例如,要运行foo.ml
:
export OCAMLRUNPARAM=b
ocamlbuild -no-links foo.d.byte && _build/foo.d.byte
于 2021-08-22T22:38:47.477 回答