![a6c6779fa458f5c156e5812c1a6581b1.png](https://img-blog.csdnimg.cn/img_convert/a6c6779fa458f5c156e5812c1a6581b1.png)
免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。
小编:记得关注哦
来源:NervosNetwork
Xuejie 是 CKB-VM的核心开发者,他在自己的博客「 Less is More」中,创作了一系列介绍 CKB 脚本编程的文章,用于补充白皮书中编写 CKB 脚本所需的所有缺失的细节实现。本文是该系列的第五篇,详细介绍了 CKB 的调试过程,快来一起查看吧 ~^.^~
作者:Xuejie
原文链接:https://xuejie.space/2019_10_18_introduction_to_ckb_script_programming_debugging/
译者:史迪仔
事实上,CKB 脚本工作的层级要比其他智能合约低很多,因此 CKB 的调试过程就显得相当神秘。在本文中,我们将展示如何调试 CKB 脚本。你会发现,其实调试 CKB 脚本和你日常调试程序并没有太大区别。本文建立在 ckb v0.23.0 之上。具体的,我在每个项目中使用的是如下版本的 commit:
• ckb:
7e2ad2d9ed6718360587f3762163229eccd2cf10
• ckb-sdk-ruby:
18a89d8c69e173ad59ce3e3b3bf79b5d11c5f8f8
• ckb-duktape:
347bf730c08eb0aab7e56e0357945a4d6cee109a
• ckb-standalone-debugger:
2379e89ae285e4e639b961756c22d8e4fde4d6ab
使用 GDB 调试 C 程序
CKB 脚本调试的第一种方案,通常适用于 C、Rust 等编程语言。也许你已经习惯了写 C 的程序,而 GDB 也是你的好搭档。你想知道是不是可以用 GDB 来调试 C 程序,答案当然是:Yes!你肯定可以通过 GDB 来调试用 C 编写的 CKB 脚本!让我来演示一下:
首先,我们还是用之前文章中用到的关于 carrot 的例子:
#include
int main(int argc, char* argv[]) {
int ret;
size_t index = 0;
uint64_t len = 0;
unsigned char buffer[6];
while (1) {
len = 6;
memset(buffer, 0, 6);
ret = ckb_load_cell_data(buffer, &len, 0, index, CKB_SOURCE_OUTPUT);
if (ret == CKB_INDEX_OUT_OF_BOUND) {
break;
}
int cmp = memcmp(buffer, "carrot