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

本贴适用于: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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容