Debugging 在ocamldebug中相当于来自ocamltop的`#use`指令?
在ocamltop中(加载文件后),我可以运行以下命令Debugging 在ocamldebug中相当于来自ocamltop的`#use`指令?,debugging,printing,ocaml,printers,coq,Debugging,Printing,Ocaml,Printers,Coq,在ocamltop中(加载文件后),我可以运行以下命令 #cd "/afs/csail.mit.edu/u/j/jgross/coq-HoTT/";; #directory "/afs/csail.mit.edu/u/j/jgross/coq-HoTT/";; #directory "/afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev";; #use "dev/include";; #trace <some_function> 和base\u in
#cd "/afs/csail.mit.edu/u/j/jgross/coq-HoTT/";;
#directory "/afs/csail.mit.edu/u/j/jgross/coq-HoTT/";;
#directory "/afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev";;
#use "dev/include";;
#trace <some_function>
和base\u include
看起来大致相同
#cd".";;
#directory "parsing";;
#directory "interp";;
...
#directory "+camlp4";; (* lazy solution: add both of camlp4/5 so that *)
#directory "+camlp5";; (* Gramext is found in top_printers.ml *)
#use "top_printers.ml";;
#use "vm_printers.ml";;
#install_printer (* identifier *) ppid;;
...
(* Open main files *)
open Names
open Term
open Typeops
open Term_typing
open Univ
...
所以在ocamldebug中,我尝试
(ocd) directory /afs/csail.mit.edu/u/j/jgross/coq-HoTT/
Directories : /afs/csail.mit.edu/u/j/jgross/coq-HoTT/ ...
(ocd) directory /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev
Directories : /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev ...
(ocd) use /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/include
Unknown command.
(ocd) source /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/include
Syntax error.
(ocd) source "/afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/include"
Syntax error.
(ocd) load_printer /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/include
Error during code loading: /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/include is not a bytecode object file
(ocd) load_printer top_printers.ml
Error during code loading: /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/top_printers.ml is not a bytecode object file
(ocd) load_printer top_printers
Cannot find file top_printers
(ocd) shell ls /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/
base_db dynlink.cmx ocamldebug-coq set_raw_db vm_printers.cmi
base_include dynlink.ml ocamldebug-coq.template TODO vm_printers.cmo
db dynlink.ml.d ocamldoc tools vm_printers.ml
db_printers.ml dynlink.o ocamlopt_shared_os5fix.sh top_printers.cmi vm_printers.ml.d
db_printers.ml.d header printers.cma top_printers.cmo
doc include printers.mllib top_printers.ml
dynlink.cmi macosify_accel.sh printers.mllib.d top_printers.ml.d
dynlink.cmo Makefile.oug README v8-syntax
(ocd) load_printer top_printers.cmi
Error during code loading: /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/top_printers.cmi is not a bytecode object file
(ocd) load_printer top_printers.cmo
Error during code loading: error while linking /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/top_printers.cmo.
Reference to undefined global `Pp'
(ocd) directory +camlp5
...
(ocd) directory +camlp4
...
(ocd) load_printer top_printers.cmo
Error during code loading: error while linking /afs/csail.mit.edu/u/j/jgross/coq-HoTT/dev/top_printers.cmo.
Reference to undefined global `Pp'
那么我如何加载这些打印机呢。(作为参考,目录结构是的。)似乎您试图在ocamldebug中使用顶级指令(以
#
开头的行),而ocamldebug对此一无所知。您必须使用调试器命令与ocamldebug对话,有关详细信息,请参阅
加载和安装打印机的外观如下所示:
directory dependencies
load_printer "printers.cmo"
install_printer Printers.pp_thing
注意明确的模块名称-没有#use
和open
。还请注意,ocamldebug将在其目录列表中搜索printers.cmo
的依赖项。如果出现未定义的全局错误,可能需要向该列表中添加一些条目
一旦一切正常,你就不想再输入那些垃圾了。将其全部放在一个文件中,比如说printers.debug
,并使用source命令加载该文件:
source printers.debug
我想你很接近
Pp
位于lib/
下的coq
发行版中,而不是在camlp4/5中——我想这就是包含这些目录的目的?是的。当我追溯到第一个未定义的全局时,我需要加载打印机str
。然后我看了一下自述文件,发现我可以改为sourcedb
,这对我来说已经足够了。
source printers.debug