LoginSignup
3
2

More than 5 years have passed since last update.

Remix IDEでデバッグする

Posted at

私はSolidityの開発に、Remix(リミックス)というブラウザベースのIDEを使ってます。
RemixはSolidityのコンパル、デプロイまでブラウザでできるのでとっても便利です。

ですがデバッグについては、現時点ですごく難しいと感じました。
Remixはコードを書いたら画面右上のタブから諸々操作します。
タブをよーく見ると「Debugger」タブもしっかりありますね。
20190121121638.png
ここからデバッグできるのですが、このデバッグが非常に分かりづらい。
しかも挙動が怪しい時もあり、それがバグなのか自分の操作ミスなのか、切り分けも難しくて心が折れます。

そこでとりあえず簡単にデバッグするために、私はevent修飾子を利用してlogに情報を出力してます。
やり方はeventを事前に定義して、それをemitで呼び出します。
分かりづらいと思うので、簡単なSolidityのサンプルコードを用意しました。

pragma solidity ^0.4.24;

contract Sample {

    mapping(uint => address) test;
    event eventDebugger(string dm, address test);

    function debuggTest() public {

        test[0] = msg.sender;
        string memory dm = "Hello debugg";

        emit eventDebugger(dm, test[0]);
    }
}

event修飾子で定義されたeventDebugger()が、今回デバッグするための関数です。
eventで定義した関数を、emitで発火させるイメージです。
emitはdebuggTest()の中で実行してます。

上記のコードをデプロイして実行すると、Remixのコンソールのlogsにデバッグ情報が出力されます。
下図の赤枠の箇所です。
20190121235708.png
ちょっと見づらいので、JSONの"logs"だけ抜粋しました。

"event": "eventDebugger",
        "args": {
            "0": "Hello debugg",
            "1": "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c",
            "dm": "Hello debugg",
            "test": "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c",
            "length": 2
        }

このようにeventで発火させた関数名があり、その中にパラメータで渡した値が出力されてます。
簡単なブロックチェーンアプリを作成するくらいなら、このやり方でも十分デバッグ可能です。

ちなみにweb3.jsというJSのライブラリを使うと、web3.js経由でargsの値をフロント側で受信できます。つまり、フロントエンドを実装する際にもこのevent機能は大いに価値を発揮するわけです。
というか本来はフロントにイベント通知するための機能なので、web3.jsを使ったフロントの実装はまた改めて学習します。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2