Debug 参数
前言
以下是 cairo-run 的一些标志,您可以使用它们来调试程序中的错误。
一、–print_info?
指示 cairo-run 打印信息部分,其中包含以下信息:
- 执行的步骤数。
- 使用的内存单元数。
- 执行结束时寄存器的值。
- 段重定位表。
请注意,您可能会在输出中看到 x:y
形式的值(例如 4:2
),这些是可重定位的值。
二、 --print_memory
打印在执行期间分配的内存单元的地址和值。
如果您得到一个指向特定存储单元的错误,检查该单元和相邻存储单元的值可能会有所帮助。
三、–steps
您可以使用 --steps 标志控制 cairo-run 执行的步骤数。这是一个可选参数——如果你不指定它,cairo-run 将一直运行到程序结束(在 main() 调用的 ret 指令之后)。
四、–no_end
如果您指定了确切的步数,并且程序没有在该步数内结束,cairo-run 将抛出错误(未到达程序末尾)。您可以使用 --no_end 标志指示 cairo-run 忽略它。指定步数,结合 --no_end 标志可用于调试程序,因为它允许您在程序运行指定步数后检查内存和寄存器的值。
五、–debug_error
发生错误时,默认情况下不打印 memory 和 info 部分。无论如何,您都可以使用 --debug_error 来打印它们。这个想法是,通过检查内存和信息部分的值,您可以更好地理解错误的来源。
六、–profile_output profile.pb.gz
输出一个可以用 pprof 查看的分析结果文件。如果你已经安装了 go,你可以使用以下命令查看结果:
go tool pprof --web profile.pb.gz
或者,您可以使用 golang docker 镜像(您需要先安装 docker):
docker run --net=host -v$PWD:/tmp starkwarelibs/pprof profile.pb.gz
或者使用这个 docker 文件手动构建 docker 镜像:
FROM golang
RUN apt update
RUN apt install -y graphviz
WORKDIR /tmp
ENTRYPOINT ["go", "tool", "pprof", "--http", "localhost:8080", "--no_browser"]
这一节没啥想说的,就这样吧,下一节Cairo的程序计数器PC。