
1. 文章摘要
【本文目標】 本文目標是指導如何使用REMIX完成一次智慧合約交易除錯。 【前置條件】 學習過Solidity語言,需要進行除錯。 【技術收穫】 1). 使用REMIX進行單步除錯 2). REMIX的Debugger介面介紹
【實操課程列表】 第一課 如何在WINDOWS環境下搭建以太坊開發環境 第二課 如何實現以太坊最簡智慧合約“Hello World”的執行 第四課 以太坊開發框架Truffle從入門到實戰 第六課 技術小白如何開發一個DAPP區塊鏈應用(以寵物商店為例) 第七課 技術小白如何在45分鐘內發行通證(TOKEN)並上線交易 第八課 如何除錯以太坊官網的智慧合約眾籌案例 第九課 如何在Remix環境下進行Solidity程式碼單步除錯 第十課 Solidity語言編輯器REMIX指導大全
【說明】未列出的課程為知識普及的非實操類課程,所有區塊鏈文章參考“區塊鏈入口”專欄。
2. 開始除錯
REMIX有2種方式啟動除錯。 新建一個智慧合約檔案”Donation.sol”,複製以下程式碼:
contract Donation {
address owner;
event fundMoved(address _to, uint _amount);
modifier onlyowner { if (msg.sender == owner) _; }
address[] _giver;
uint[] _values;
function Donation() {
owner = msg.sender;
}
function donate() payable {
addGiver(msg.value);
}
function moveFund(address _to, uint _amount) onlyowner {
uint balance = this.balance;
uint amount = _amount;
if (_amount <= this.balance) {
if (_to.send(_amount)) {
fundMoved(_to, _amount);
} else {
throw;
}
} else {
throw;
}
}
function addGiver(uint _amount) internal {
_giver.push(msg.sender);
_values.push(_amount);
}
}
複製程式碼
2.1 從使用者介面開始
RUN執行環境選擇JavaScript VM ,它用於模擬客戶自定義環境,開始點選Create按鈕執行智慧合約:

設定´value´的值為10,單位選擇ether,點選Donate 表示從當前賬號捐贈10個ETH給該智慧合約。

Remix顯示交易相關的一些資訊。在終端輸出器,此次交易被記錄,點選”Debug”按鈕可開始除錯。
2.2 從偵錯程式開始
在”Debugger”控制皮膚進入,在對應的編輯框輸入transaction hash / block number、transaction index資訊也可以開始會話。

3. 使用偵錯程式



3.1 Instructions皮膚

Instructions皮膚顯示當前高亮顯示的執行合約的組合語言。 注意:當該皮膚隱藏時,滑動條的執行粒度是一個course的,即使在多EVM環境構建,也只會在語法邊界停止;當該皮膚顯示時,才可能逐步進入到構建函式內部,即使對應相同的語句。
3.2 Solidity Locals皮膚

3.3 Solidity State皮膚

3.4 Low level皮膚

3.5 交易回滾(Reverted Transaction)

3.6 Breakpoints斷點和單步除錯
導航欄的5,7按鈕按鈕用於回滾到前一個斷點和執行到下一個斷點。 在左側編輯框的行數處單擊即可增加和刪除斷點。 作為樣例,在18行和20行雙擊,設定2個斷點,在Run皮膚的moveFund輸入框內輸入引數,給第二個賬號轉移0.0005個ETH。點選”MoveFund”執行該交易函式。
"0x14723a09acff6d2a60dcdf7aa4aff308fddc160c",500000000000000
合約交易執行成功後,點選終端輸出器中的Debug按鈕,點選除錯皮膚的“Jump to the next breakpoint”程式會執行到第一個斷點處。

再點選“Jump to the next breakpoint”按鈕一次,直接執行到20行第二個斷點處。 點選”Jump out”函式跳出該函式,執行完成後可以看到第二個賬號餘額發生了改變,增加了0.0005個ETH。 點選展開Detail,可以看到EVENT事件記錄的引數資訊。

3.7 切換賬號呼叫存量合約
REMIX在“Environment”採用“Injected WEB3”的方式下,切換賬號會導致智慧合約呈現消失。 此時可以通過呼叫合約地址的方式把合約和命令復原回來。 例如我有一個部署在ropsten的智慧合約,地址為"0xbb7695fe978176cbe86d27b9e2b4e9eff1a04f82",恢復方法如下圖所示:記得輸入合約地址框不要加"" 哦。

4.參考文件
1),REMIX除錯英文官網文件 2), SOLIDITY語言官網中文版
尊重知識輸出,如需引用,敬請說明本文連結和作者-筆名輝哥。