一、调试模式
目前 browser-solidity 有两种常用的调试方式,一个是采用本地虚拟机调试模式,一个是连接到本地的私有链进行调试。
1. 本地虚拟机调试模式
本地虚拟机调试,就是不连接任何一个节点,在内存虚拟出一个以太坊节点进行调试,优点是速度快,配置简单,缺点是因为只是虚拟调试,可能最后放到真正的区块链 节点上运行智能合约会和预想的结果不同。
首先在 DEBUG 环境设置中,选择 JavaScript VM 以设置本地虚拟调试模式。
智能合约代码编写好后,点击 “Create” 按钮部署智能合约到内存中,并进行调试,如果部署成功,会出现智能合约的函数运行按钮和参数输入框,然后就可以调试你的智能合约了。
运行函数后,会出现相应的交易数据,可以完成整个智能合约调试。
如果想逐步调试智能合约,那么选择小虫子图标,切换到逐步调试界面,即可实现单步运行智能合约,注意这里的单步运行不是指代码而是指智能合约编译后的 OPCODE。
2. 连接到本地私有链调试
连接到本地私有链调试,就是通过 RPC 接口,连接本地的以太坊节点,实际部署并调试智能合约,缺点是速度较慢,配置复杂,优点是能够真实运行智能合约,最大程度的防止出错,关于私有链的配置,请参考我原先发表的文章《区块链开发(一)搭建基于以太坊的私有链环境》。
首先在 DEBUG 环境设置中,选择 Web3 Provider 以设置本地虚拟调试模式,同时默认会给出一个连接地址为 http://localhost:8545 ,如果你配置的私有链 RPC 端口修改了,记得要改成对应的端口
然后,切换到账号状态栏,此时显示的可用账号,应该都是你部署的私有链里面的账号,如果不是,说明没有成功连接私有链。可能的原因有两个,一是私有链提供的端口是用 http 访问,而 browser-solidity 的网页访问地址是 https,解决的方法就是将 browser-solidity 访问地址改为 http 协议的地址即可 http://ethereum.github.io/browser-solidity/ ;二是系统的时间没有和网络同步,使用 windows 系统自带的时间同步功能同步一下即可。
二、调试手段
1. 变量查看
(1)变量可设置为 public address public withDrawAddress= 0x0;
(2)在 rimix 函数变量调试栏,点击变量同名按钮,即可查看当前值
2. 日志查看
(1)增加 event 事件的事件声明 event TransferWithDraw (uint balance);
(2)在要调用日志的地方,执行事件调用 TransferWithDraw (withDraw);
(3)执行函数时,remix 在 logs 列,有 TransferWithDraw 日志输出语句
3 使用 remix 的 Debug 功能
(1)在 remix 右侧,点击执行要执行的函数
(2)查看 remix 下方,有执行结果输出
(3)点击 remix 下半部分的 “Debug” 按钮,在右侧弹出 Debug 工具栏
主要关心当前的调试步进,还有当前的变量值。
三、完整实例代码
1 | pragma solidity ^0.4.14; |
四、其他常见智能合约资源
下面一些例子网站去参考一些成熟的代码,方便快速迭代学习,常见的例子网站如下:
开发框架
常用的有 3 个:
Truffle:说明书地址 http://truffle.readthedocs.io/en/latest/
以太坊目前很流行的开发框架 Truffle 的说明书,这个框架比较流行。(主要推荐)Dapple:说明书地址 http://dapple.readthedocs.io/en/master/
这个开发框架是在 gitter chart 上看到的,感觉用的人不多,先观察Meteor:说明书地址 https://github.com/ethereum/wiki/wiki/Dapp-using-Meteor
这个开发框架是以太坊官方推荐的,写进了以太坊的官方 wiki,值得学习,当然,以太坊官方经常转换方向,以后换别的也没准