Remix IDEでデバッグする
私はSolidityの開発に、Remix(リミックス)というブラウザベースのIDEを使ってます。
RemixはSolidityのコンパル、デプロイまでブラウザでできるのでとっても便利です。
ですがデバッグについては、現時点ですごく難しいと感じました。
Remixはコードを書いたら画面右上のタブから諸々操作します。
タブをよーく見ると「Debugger」タブもしっかりありますね。
ここからデバッグできるのですが、このデバッグが非常に分かりづらい。
しかも挙動が怪しい時もあり、それがバグなのか自分の操作ミスなのか、切り分けも難しくて心が折れます。
そこでとりあえず簡単にデバッグするために、私は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にデバッグ情報が出力されます。
下図の赤枠の箇所です。
ちょっと見づらいので、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を使ったフロントの実装はまた改めて学習します。
Author And Source
この問題について(Remix IDEでデバッグする), 我々は、より多くの情報をここで見つけました https://qiita.com/yamaguchi3/items/e6ea5d6a04ee836b59da著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .