Scilla 调试器:开始

Scilla旨在防止所有潜在错误,例如内存泄漏、内存访问违规,并保证适时终止(即任何 Scilla 代码在执行时遇到错误会始终终止)。然而,这并不意味着 Scilla 代码不会存在错误。功能性错误(例如,编码的业务逻辑中的错误)是无法避免的。虽然我们也在不断努力开发用于 Scilla 程序形式验证的工具,但仍然需要一个帮助调试 Scilla 程序的工具。

Scilla 调试器:开始

错误🐞🐛

编写好的计算机程序很难,然而调试它们通常更难。虽然错误是软件编程所固有的,但一些编程语言却可以通过消除某些潜在错误来避免更多类型的错误。因此,你可能会在 C 程序中遇到内存泄漏,但 Java 的垃圾收集器却可以确保你不必管理内存,从而避免此类错误。

Scilla旨在防止所有潜在错误,例如内存泄漏、内存访问违规,并保证适时终止(即任何 Scilla 代码在执行时遇到错误会始终终止)。然而,这并不意味着 Scilla 代码不会存在错误。功能性错误(例如,编码的业务逻辑中的错误)是无法避免的。虽然我们也在不断努力开发用于 Scilla 程序形式验证的工具,但仍然需要一个帮助调试 Scilla 程序的工具。

调试器🐞🔍

与名称所暗示的字面意思相反,调试器不会修复错误。它们是开发者用来查找错误原因的工具。通常,调试器允许逐步执行程序(及其输入)并在此受控执行期间查看程序变量的值。

到目前为止(译者注:TLA+ 发布之前),调试 Scilla 程序的过程并不简单。要找到特定执行所遵循的代码路径,开发者必须插入事件语句(作为printf 调试的替代)。大多数时候添加额外的代码只是为了调试并确保以后删除它们,但这样做是很麻烦的。Scilla 调试器却可以让这一切都变得轻松无比。

我们决定搭载正在进行的 Scilla 编译器 (+VM) 项目并在该框架中开发调试工具,而不是从头开始编写调试器。

Scilla 编译器和 VM

前段时间,我们写了一篇关于 Scilla 的编译执行框架,它涉及将 Scilla 编译为 LLVM-IR,并通过 JIT 将其编译为基于 LLVM 的虚拟机 (VM) 中的机器代码来执行 LLVM-IR。对技术好奇的读者还可以参考我们的LLVM开发者会议2020海报以及提交的详细报告。该框架的大部分功能都已完成,我们正在努力尽早将其投入生产。

该框架提供的一个优势(除了降低执行延迟的主要目标之外)是 LLVM 编译器基础设施的全部功能。为了本文,在我们的例子中,它展示的是正在为 Scilla 开发一个调试工具。

作为为我们的编译器添加调试信息 ( debuginfo) 支持的第一步,我们为 LLVM 的 OCaml 接口提供debuginfo支持。这使我们能够使用源位置信息注释我们为 Scilla 合约生成的 LLVM-IR。

演示视频

下面的视频展示了一个简单合约,它可以访问 Scilla 映射,并逐行执行它的 transition IncrementNOpt

为了在IncrementNOpt中设置断点并启动调试会话,我们设置了 GDB 脚本(为方便起见)。一旦遇到断点,就会执行逐行跟踪。此会话中的可执行文件是 VM 的用户友好前端,如Scilla 命令行解释器一样,它从命令行接收合约及其输入(消息和状态 JSON)并生成输出 JSON。GDB 会话实际上是此可执行文件的调试会话,它在运行期间进入 Scilla 合以及transition的 JIT 编译本机代码。

我们希望这种单步执行支持(作为我们调试工具工作的第一阶段)将帮助 Scilla 开发者理解复杂的控制流。

接下来是什么

我们今天实现的调试支持仅涵盖行号信息,这些信息支持逐步执行 Scilla 代码。尚不支持打印 Scilla 变量的运行时值。这是一个相对更复杂的任务,但我们已经计划将它用于 Scilla 编译器和 VM 的生产版本。

更广泛地说,我们的 Scilla 开发工具包目前提供了一个静态类型检查器(在下图中标记为“Scilla Checker”)和一个解释器。以下项目计划用于未来版本:

  • 高级语言:Scilla 是一种中级语言。这意味着它可以轻松用作优化器、静态检查器和验证工具的输入。但这有时会导致 Scilla 程序冗长且难以手动编写。为了解决这个问题,我们计划设计和实现一种更高级的语言,目的是“易于编写代码”。我们将提供一个编译器,将用这种新语言编写的程序翻译成 Scilla。
  • Scilla 编译器和 VM:我们已经在上面讨论了许多细节和参考资料。
  • 验证工具:我们正在进行的将 Scilla 转换为 TLA+ 的项目是我们为 Scilla 合约提供形式验证和证明支持的所有努力的一部分。  

Scilla 调试器:开始

本文来自投稿,不代表Zilliqa中国社区立场,如若转载,请注明出处:https://www.china-zil.com/news/scilla-%e8%b0%83%e8%af%95%e5%99%a8%ef%bc%9a%e5%bc%80%e5%a7%8b/

0 0 投票数
文章评分
订阅评论
提醒
guest
4 评论
最久
最新 最赞
内联反馈
查看所有评论
18382929934
18382929934
1 月 前

开始的还在Eth上的Zil怎么切换到现在的主网

18382929934
18382929934
回复给  Babbage
1 月 前

我试着操作了一下,但是遇到了很多问题,有什么教程之类的可以帮到我吗?

18382929934
18382929934
回复给  Babbage
1 月 前

我已经把erc-20 zil 转换为了eZil,是否可以用于转账了?还需要什么操作吗

4
0
希望看到您的想法,请发表评论。x
()
x