Neo专栏|分形调试:重新定义区块链开发者体验
共 2784字,需浏览 6分钟
·
2020-12-13 17:29
为了不断提升开发者体验,
Neo 是第一个将由微软推出的时间穿越调试器(Time-Travel Debugging)提供给全球区块链开发者的平台。
随着 Neo3 推出在即,
下一个重大调试创新-分形调试 (Fractal Debugging) 将进一步允许开发者进行跨链调试。
Unix 的创造者 Brian Kernighan 在 C 语言主流化的发展中起了重要作用。他在 1974 年的杰作《编程风格的元素》中说:“每个人都知道,调试的难度是编写一个程序的两倍。因此,如果你在编写时足够聪明,又何须去调试它?”
我们意识到 Kernighan 的先见之明。软件开发人员常常会花费多达四分之一的时间在验证,调试和让软件组件,服务及系统生效上;并且,质量评估,测试,调试以及修复和维护代码的成本通常占软件开发预算的三分之一或更高。
关于调试的一些常见话题
根据我们过去 70 多年为世界上最大的软件公司之一构建软件工具和平台的经验,在调试软件组件,服务和系统方面,我们看到了专业开发人员老生常谈的三个问题。
首先,定位并理解代码错误是有一定难度的。在捕捉和呈现生产系统中或故障期间产生的事件方面,主流软件生态系统的能力不断提高。在生产场景,安全警示和系统性能约束相关的应用中,我们用于捕捉和定位代码错误的工具将会逐步得到改良。
其次,由于从日志中捕获信息的需求越来越多,我们对日志流和文件分析的支持进行了增强。此处的关键是从分析中获取并提供有关项目状态的增强关联信息。这些工具对于信息汇总协调的越好,开发人员的生产效率就越高。
第三,俗称反向调试器(Backward debugger)的概念,即允许用户在执行模式中倒退一步,并理解和利用类似于视频记录的“历史”。微软在主流软件行业率先推出了时间穿越调试器(Time-Travel Debugging),而 Neo 是第一个将其提供给全球区块链开发人员的平台。
时间穿越调试器
Neo 智能合约调试器如何提高区块链行业的标准?
区块链平台可实现强大的新概念,同时也为开发人员带来了独特的挑战。状态机可以出现完全精确错误(perfectly accurate mistakes);代码毕竟是由人为编写,出现程序错误是难免的。然而,正如熟悉 DAO 的人所知,由于底层分类帐的不可变性,区块链上的错误会产生巨大的影响。
通常来说,日志可以有效地为我们指明实际问题,并且我们擅长发现日志中的异常和错误。但是,日志最多只能解决一半的问题。日志好比将“面包屑“留给开发人员作为线索,并且乐观地希望是它们足以为开发人员提供指引,以预测在主网中代码执行的各种情况。
然后,开发人员根据有关实际问题的标志信息来进行定向,然后在一个紧密的内部循环中进行设置,该循环包括设置断点,运行光标,进入和退出方法。在这个软件考古学周期中要花费数小时甚至数天的时间。但是,一旦在测试网或主网中出现一个新的相对复杂的问题,我们就会被迫回到原点。
现在,更糟的是,代码中通常存在一些隐蔽的错误,其中可观察到的效果通常在时间和/或空间上与故障的位置偏离。在这一点上,传统方法是以“但是,它可以在我的机器上可以正常运作……”而告终。
时间穿越调试使开发人员可以轻松地在代码执行过程中前进或倒退,不仅可以使开发人员加深对内容的了解,也便于检查导致错误的每个可能步骤并找出代码问题的最佳解决方案,大大简化调试过程。
时间穿越调试通过允许开发人员在区块链上记录正在运行的代码的执行情况,不用考虑过去或将来而重新运行代码,从而加速了开发人员的编辑,编译,构建和调试循环;它通过捕获跟踪文件中的代码执行来尽可能减少开销,从而高效地做到这点。
分形调试(Fractal Debugging)
现在,Neo 智能合约调试器会重新定义区块链行业的编程调试。
没有哪个系统是完全独立的;同理,也没有哪条区块链可以做到完全独立。在公链领域,各个项目追求的目标有时是共通的,涉及规模,可扩展性,安全性,隐私,经济模型,治理结构等。在私有链和联盟链领域,长期存在的异构性和互操作性驱动着技术和链栈(chain stacks)的多样性。
通常来说,跨链方案包含需要访问外部数据源(例如 Neo3 内置 Oracle)和其他网络资源(例如 Neo3 内置 NeoFS)的用例。在这些情况下,“跨链”调试的能力变得至关重要。
在学术界,模型检查(Model Checking)和相关的定理证明方法(Theorem-proving approaches)已经成为调试分布式系统的两个重要研究领域。模型检查是一个详尽的分析过程:它有两个子类别,符号模型检查代表并探索了使用抽象数学的可能执行方式,而形式化模型检查则着重于程序执行。
但是,这些方法的有效性在实际建模和扩展性方面受到限制,使其无法从学术层面直接应用到生产系统领域。定理证明可以证明分布式系统没有任何故障(或限制故障范围)。但是,这些技术无法扩展到实践中。
通过我们的分形调试方法,为了实现跨链方案,我们采用了多管齐下的方法,涵盖了追踪,日志分析以及时间穿越调试和可视化。
跟踪可以追查通过系统,跨协议的信息和数据;对子系统进行检测,以收集和整理多个交叉点处的预定义指标,跨链视图的数据和多个执行实例的情报。跟踪的先决条件是检测协议,功能等。
在基础协议和/或功能对仪器构成约束的情况下,应用互补的轻量级日志分析。这种黑匣子方法能够提供跨越各种来源的详细数据。关键是使用开发人员熟悉的调试范例,使其便于开发人员使用。
最后,如前所述,时间穿越调试获取了执行方案,以便以后可以重演该方案的特定实例;在调试不确定性行为时特别有用。时间穿越调试与可视化技术相结合,结合了跟踪和日志分析,使开发人员可以更好地理解“跨链”。
聚焦跨链开发效率
编程使人考量思考的模式,而在调试代码让人提升学习的方法。本着这种精神,我们发布了 Neo 智能合约调试器的第一个版本,并且我们将继续专注于为开发者提供区块链行业中一流的调试工具。
我们的目标是继续提高开发人员的编码体验,并推动包括 Oracle,FS 等在内的跨链开发方案不断前进。随着 Neo3 发布的临近,Neo 智能合约调试器的增强功能也即将推出,我们期待为全球的开发人员提供跨链场景下的分形调试。
「Neo 智能合约调试器」下载链接
https://marketplace.visualstudio.com/items?itemName=ngd-seattle.neo-contract-debug