美文网首页
2018-11-09 EOS开发调试环境搭建(全部流程)

2018-11-09 EOS开发调试环境搭建(全部流程)

作者: 猴子哥669 | 来源:发表于2018-11-18 12:42 被阅读0次

本贴适用于:Linux-ubuntu16.04版本和mac-osx 10.12+版本

一、最新代码编译构建

1、从github上克隆代码仓库到本地

[plain] view plain copy

git clone https://github.com/EOS-Mainnet/eos  

2、更新代码仓库子模块,使用递归参数

[plain] view plain copy

git submodule update --init --recursive  

3、git tag命令查看版本标签,下拉找到mainnet-1.0.4,以后再升级新的版本,在代码本地仓库目录下git pull,再git tag,就能找到最新版本。

4、git checkout 命令检出mainnet-1.0.4版本代码

git checkout mainnet-1.0.4

注意:我的系统里因为原来已经有本地代码仓库,版本是mainnet-1.0.3,而且代码有修改,所以当我git checkout的时候提示先提交修改过的代码或把修改过的文件stash,然后再git chekcout。因为我提交不了代码,所以只能选择:get stash,然后再git checkout。这样就可以成功检出最新版本代码:mainnet-1.0.4。可以使用git branch命令检查一下检查代码是否成功。

正当我写这篇贴的时候,BM团队为解决mainnet-1.0.4版本有节点停止出块的问题,紧急升级到了mainnet-1.0.5版本,收到消息,我git pull,拉取最新仓库,git tag,果然mainnet-1.0.5已经存在了,所以我又进行了git checkout mainnet-1.0.5的操作,接下来就在1.0.5的版本上搞事情吧,永远保持最新!

5、执行自动化构建脚本。

./eosio_build.sh

如果是首次编译构建代码,过程中可能会遇到一些坑:

比如:boost库下载失败或安装失败,mongodb以及mongodb驱动下载失败,可以从我的百度网盘下载:

mongo-c-driver-1.9.3

链接:https://pan.baidu.com/s/1bMMIhqGPHSIEZjIQqFVuhg  密码:h4a1

mongodb 3.6.3

链接:https://pan.baidu.com/s/1KfPMv8qWRU8EMMLl-reAAg  密码:38q0

请阅读脚本:eos/scripts/eosio_build_ubuntu.sh  或  eosio_build_darwin.sh,视你的操作系统而定,把下载的文件放到合适的位置,把如下图所示的下载过程注释掉,再进行编译。

还有如果你安装的是ubuntu的虚拟机,自动化编译过程可能会因为主机物理内存小于7G,而报错编译失败,这个问题可以通过修改eos/scripts/eosio_build_ubuntu.sh脚本中的第27-31行,注释掉这5行,如下图:

初次构建由于要下载安装一堆的依赖库,时间会很长,大概2-3个小时,耐心等待吧!

如果以前已经多次编译成功,依赖库就不会被重新下载安装,应该会很顺利。

6、为了后续操作方便,可以安装一下,省的每次启动nodeos或敲cleos命令行都要切换目录

[plain] view plain copy

sudo make install  

7、config.ini文件内容如下,可以参考。

genesis-json = ./genesis.json

block-log-dir = blocks

readonly = 0

send-whole-blocks = true

enable-stale-production = true

http-server-address = 127.0.0.1:8888

p2p-listen-endpoint = 0.0.0.0:9876

p2p-server-address = localhost:9876

allowed-connection = any

#p2p-peer-address = 192.168.31.220:9876

#p2p-peer-address = localhost:9877

required-participation = 33

#Private key: 5JZ5Wwb8uQbi3A7DmMsD2zevcKCYw1pxmitij1x4xCjU8gv7ucj

#Public key: EOS6a5pr4DS4CksCQSHqTdKMPbAdCyrE4b7QExDwTuCxH1vbkYMqG

# key for eosio

producer-name = eosio

private-key = ["EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV","5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"]

# actinve key for bp.a

producer-name = p1

private-key = ["EOS6a5pr4DS4CksCQSHqTdKMPbAdCyrE4b7QExDwTuCxH1vbkYMqG","5JZ5Wwb8uQbi3A7DmMsD2zevcKCYw1pxmitij1x4xCjU8gv7ucj"]

# actinve key for bp.b

producer-name = p2

private-key = ["EOS5NiFNF4bG7T49S6f7qVXMAt4RN2WM211s77UZrwD4cz2Xu6gw9","5JKkei9CFtawsvnHt728DUQaahcjHm5nqJsNgZzna9XZKq8eA5c"]

# actinve key for bp.c

producer-name = p3

private-key = ["EOS59rjXxZLjRnUEdErjtCEN8fihQnMmdsWYSz7jaeruPEoSeyCHz","5JBDtjPbUeV2Hte6ZuFE5ny9RtuUujWEKG1u2yYPw2jmkCR7A4Y"]

# actinve key for bp.d

producer-name = p4

private-key = ["EOS5psRxWMGyQS4HPNY8fa4PDhgP53vD4AZ6w24Z9HUCTxXKEH7Ey","5JQPYAtWxdzGsJkBpHyWBV18N2rzFtMjcBwxvfndS3KXe4oQu3L"]

plugin = eosio::producer_plugin

plugin = eosio::chain_api_plugin

#plugin = eosio::account_history_api_plugin

plugin = eosio::wallet_plugin

plugin = eosio::wallet_api_plugin

plugin = eosio::http_plugin

plugin = eosio::net_plugin

plugin = eosio::net_api_plugin

8、genesis.json文件内容,可参考。

{

  "initial_timestamp": "2018-06-08T08:08:08.888",

  "initial_key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",

  "initial_configuration": {

    "max_block_net_usage": 1048576,

    "target_block_net_usage_pct": 1000,

    "max_transaction_net_usage": 524288,

    "base_per_transaction_net_usage": 12,

    "net_usage_leeway": 500,

    "context_free_discount_net_usage_num": 20,

    "context_free_discount_net_usage_den": 100,

    "max_block_cpu_usage": 200000,

    "target_block_cpu_usage_pct": 1000,

    "max_transaction_cpu_usage": 150000,

    "min_transaction_cpu_usage": 100,

    "max_transaction_lifetime": 3600,

    "deferred_trx_expiration_window": 600,

    "max_transaction_delay": 3888000,

    "max_inline_action_size": 4096,

    "max_inline_action_depth": 4,

    "max_authority_depth": 6

  }

}

9、config.ini和genesis.json文件放置路径

[plain] view plain copy

linux-ubuntu:  ~/.local/share/eosio/nodeos/config/  

mac-osx:  ~/Library/Application\ Support/eosio/nodeos/data/confi  

10、启动nodeos前注意:清理旧的数据

二、使用vscode 开发工具对代码进行单步调试,查看堆栈调用

1、在mac-osx系统和ubuntu中都可以使用vscode对c++代码进行开发编辑和调试,vscode工具下载安装略过,请百度。

2、这里只说单步调试和查看堆栈调用,所以需要打开eosio_build.sh脚本,把第51行CMAKE_BUILD_TYPE=Release修改成CMAKE_BUILD_TYPE=Debug,执行./eosio_build.sh

./eosio_build.sh

3、编译完成后,打开vscode,打开文件夹,选择eos代码主目录,选择打开

4、配置任务,如图所示菜单路径:任务->配置任务

5、使用模板创建tasks.json文件

6、MSBuild执行生成目标

7、mscode会在eos工程目录下创建一个tasks.json文件,并打开,如下所示

8、按下图修改tasks.json文件

{

    // See https://go.microsoft.com/fwlink/?LinkId=733558

    // for the documentation about the tasks.json format

    "version": "2.0.0",

    "tasks": [{

        "label": "eosio_build",

        "type": "shell",

        "command": "cd build && make nodeos -j4",

        "group": {

            "kind": "build",

            "isDefault": true

        },

        "problemMatcher": []

    }]

}

9、菜单:调试->添加配置...

10、vscode会在eos工程目录下创建launch.json文件,如下图

11、按照下图修改launch.json文件

{

    // 使用 IntelliSense 了解相关属性。

    // 悬停以查看现有属性的描述。

    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

    "version": "0.2.0",

    "configurations": [

        {

            "name": "(lldb) Launch",

            "type": "cppdbg",

            "request": "launch",

            "program": "${workspaceFolder}/build/programs/nodeos/nodeos",

            //"args": ["get","info"],

            "stopAtEntry": false,

            "cwd": "${workspaceFolder}/build",

            "environment": [],

            "externalConsole": true,

            "MIMode": "lldb"

        }

    ]

}

12、菜单:任务->运行任务

13、输入或选择eosio_build

14、如下图所示,vscode会执行一次代码编译,以后修改代码后,可以直接在这里执行编译。

15、编译完成后可以在programs/nodeos/main.cpp的main函数里下个断点,如下图所示

16、菜单:调试->启动调试或F5,片刻后系统会启动一个新的终端控制台,显示nodes的运行,因为我们设置了断点,所以程序会停在断点处,终端显示的nodeos程序也会暂停在下面的状态。

17、nodeos程序停在断点处,如下图所示

18、按F5继续运行到下个断点,因为下个断点还没设置,所以nodeos程序开始不间断执行,如下图所示

18、按照下图所示打开plugins->chain_plugin->chain_plugin.cpp,在get_info函数中(598)行下个断点

19、打开一个新的终端控制台程序,输入cleos get info命令,如下图所示

20、控制台输入:cleos get info命令后回车,屏幕会自动跳到vscode代码编辑窗口,断点调试指示器游标会停在598断点处,如下图所示

21、打开左边栏的debug面板,如下图

22、左边栏可以看到:变量、监视、调用堆栈、断点4个标签分栏。变量一栏可以查看当前调试文件下的全局和局部变量,监视一栏可以查看添加到监视器里的变量的变化情况,调用堆栈一栏可以看到,从程序开始运行到断点处的所有命名空间、类、函数的调用关系,断点一栏显示所有已打的断点,可以操作使断点有效或无效,或删除断点。

23、下图显示如何把一个变量添加到监视器

24、调试过程

25、get info 命令调试结束

26、停止调试

---------------------

作者:kevin昆

来源:CSDN

原文:https://blog.csdn.net/caokun_8341/article/details/80713851

版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

网友评论

      本文标题:2018-11-09 EOS开发调试环境搭建(全部流程)

      本文链接:https://www.haomeiwen.com/subject/orfoxqtx.html