CKB/使用 printf 函数进行代码调试
CKB Standalone Debugger 是我们开发的一个 CKB 调试工具集合, 而其中 ckb-debugger 是最广泛被使用的一款工具. 通过 ckb-debugger, 你可以直接运行一个 RISC-V 程序, 或是在链下执行一个 CKB 交易以协助开发或者调试.
在编写 C 合约代码时, 我们可以使用 printf 函数向 ckb-debugger 打印调试信息. 首先下载 ckb-c-stdlib:
$ git clone https://github.com/nervosnetwork/ckb-c-stdlib
编写一个测试文件, 暂时命名为 main.c
#include "ckb_syscalls.h"
int main() {
printf("Hello World!");
}
使用 clang 对其进行编译. 注意编译参数, 必须添加 -DCKB_C_STDLIB_PRINTF=1
和 -DCKB_PRINTF_DECLARATION_ONLY=1
才能使用 printf
函数. 相关条件编译代码可在 ckb-c-stdlib/libc/src/impl.c
中找到.
$ clang --target=riscv64 -march=rv64imac_zba_zbb_zbc_zbs \
-nostdinc -nostdlib \
-DCKB_C_STDLIB_PRINTF=1 \
-DCKB_PRINTF_DECLARATION_ONLY=1 \
-I ckb-c-stdlib/libc -I ckb-c-stdlib \
-o main \
main.c
待编译完成后, 即可使用 ckb-debugger 执行程序, 执行命令如下:
$ ckb-debugger --bin main
Hello World!
Run result: 0
Total cycles consumed: 7059(6.9K)
Transfer cycles: 4537(4.4K), running cycles: 2522(2.5K)