eos源码分析和应用(一)调试环境搭建
转载自 http://www.limerence2017.com/2018/09/02/eos1/#more
eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用)。下面搭建在windows环境下的虚拟机,并且安装eos引擎,以及配合vscode实现断点调试。
创建vmware虚拟机安装ubuntu系统
去下载vmware虚拟机,然后安装。
vmware虚拟机链接地址
ubuntu系统下载16.04版本以上的,下载地址
ubuntu下载地址
下面创建虚拟机,选择创建一个新的虚拟机
选择自定义

选择稍后安装系统镜像
操作系统选择linux
安装位置自己设定
设置处理器数量,根据自己机器酌情设置
内存设置,eos编译要求至少7G内存,我设置8G,如果机器内存不够,可以设置小一点,之后改eos_build.sh中的设置就可以。
网络设置走默认就行



存储空间我设置了80G,根据自己机器设置,至少40G空间
虚拟机数据存放位置

虚拟机安装好了
点击编辑虚拟机设置,点击cd/dvd ,选择使用ISO映像文件
确定后,点击运行虚拟机,自动安装ubuntu,ubuntu具体安装选择不做赘述。
编译eos,运行eos
1 进入自己用户目录,创建文件夹,然后clone 代码
git clone https://github.com/EOSIO/eos--recursive
2 下载后进入eos目录,执行eosio_build.sh脚本,出现如下显示,则编译成功。
我输入sudo ./eosio_build.sh, 等待编译完成
如果出现boost ,mongodb等下载失败,无法执行成功,那么修改eos/scripts/eosio_build_ubuntu.sh,注释掉connect下载等操作,然后手动下载放入eos查找的目录即可。同样的道理,内存不足7G,空间不足40G,eosio_build_ubuntu.sh脚本会exit,注释掉exit代码即可继续编译。
编译成功后,可以执行以下命令运行节点,当前目录为eos
cd ./build/programs/nodeos ./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugi
那另起一个shell终端,执行cleos查看当前网络信息
cd build/programs/cleos
./cleos get info
eos 根目录在~/.local/share/eosio/,
~/.local/share/eosio/nodeos/config/目录下有config.ini 和genesis.json两个文件,通过配置config.ini,可以直接运行节点,不需要带参数。
config.ini 配置如下
genesis-json = ./genesis.json
block-log-dir = blocks
readonly =
send-whole-blocks = true
enable-stale-production = true
http-server-address = 127.0.0.1:
p2p-listen-endpoint = 0.0.0.0:
p2p-server-address = localhost:
allowed-connection = any
#p2p-peer-address = 47.105.111.1:
p2p-peer-address = 192.168.1.59:
#p2p-peer-address = localhost:
required-participation = #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
genesis.json
{
"initial_timestamp": "2018-06-08T08:08:08.888",
"initial_key": "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"initial_configuration": {
"max_block_net_usage": ,
"target_block_net_usage_pct": ,
"max_transaction_net_usage": ,
"base_per_transaction_net_usage": ,
"net_usage_leeway": ,
"context_free_discount_net_usage_num": ,
"context_free_discount_net_usage_den": ,
"max_block_cpu_usage": ,
"target_block_cpu_usage_pct": ,
"max_transaction_cpu_usage": ,
"min_transaction_cpu_usage": ,
"max_transaction_lifetime": ,
"deferred_trx_expiration_window": ,
"max_transaction_delay": ,
"max_inline_action_size": ,
"max_inline_action_depth": ,
"max_authority_depth":
}
}
这样直接执行就可以了
cd ./build/programs/nodeos
./nodeos
配置vscode,设置断点调试
eosio_build.sh脚本,把第51行CMAKE_BUILD_TYPE=Release修改成CMAKE_BUILD_TYPE=Debug,执行./eosio_build.sh,这样生成debug版本才可以断点调试。
ubuntu 软件中心下载visualstudio code, 进入软件界面,导入eos项目。
1 配置任务,如图所示菜单路径:任务->配置任务,选择使用模板创建tasks.json文件,MSBuild执行生成目标。
在eos工程目录下创建一个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": []
}
]
}
2 菜单:调试->添加配置..vscode会在eos工程目录下创建launch.json文件,如下图

修改launch.json文件
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/programs/nodeos/nodeos",
//"args": ["--genesis-json","/home/secondtonone1/.local/share/eosio/nodeos/config/genesis.json"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build",
"environment": [],
"externalConsole": true,
"MIMode": "gdb"
}
]
}
mac 系统请设置MIMode成lldb形式
3 任务->运行任务,选择eosio_build,vscode会执行一次代码编译,以后修改代码后,可以直接在vs中修改代码编译
在main函数处设置断点
4 菜单:调试->启动调试或F5
程序运行到断点处暂停,可以F10单步调试,也可以F5跳过继续运行下一个节点,左侧Debug目录点击,可以看到调用的堆栈信息和变量信息。
到此为止,eos编译运行,以及调试环境搭建完了。下一篇源码分析,eos整个流程运行机制。
谢谢关注我的公众号
eos源码分析和应用(一)调试环境搭建的更多相关文章
- neutron源码分析(一)OpenStack环境搭建
一.OpenStack安装 安装一个初始化的Mitaka版本的OpenStack环境用于分析,neutron源码 序号 角色 IP地址 版本 1 controller 172.16.15.161 mi ...
- vlc源码分析(七) 调试学习HLS协议
HTTP Live Streaming(HLS)是苹果公司提出来的流媒体传输协议.与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙. 一.HLS播放模式 (1) 点播模式(Vide ...
- EOS源码分析:transaction的一生
最近在处理智能合约的事务上链问题,发现其中仍旧有知识盲点.原有的认识是一个事务请求会从客户端设备打包签名,然后通过RPC传到非出块节点,广播给超级节点,校验打包到可逆区块,共识确认最后变为不可逆区块. ...
- 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
概要 最近写了spring系列,这个系列还在进行中,然后有些同学开始叫我大神,然后以为我各方面都比较厉害,当然了,我是有自知之明的,大佬大神什么的,当作一个称呼就好,如果真的以为自己就是大神,那可能就 ...
- PHP扩展编写、PHP扩展调试、VLD源码分析、基于嵌入式Embed SAPI实现opcode查看
catalogue . 编译PHP源码 . 扩展结构.优缺点 . 使用PHP原生扩展框架wizard ext_skel编写扩展 . 编译安装VLD . Debug调试VLD . VLD源码分析 . 嵌 ...
- Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建
Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...
- 【精】EOS智能合约:system系统合约源码分析
系统合约在链启动阶段就会被部署,是因为系统合约赋予了EOS链资源.命名拍卖.基础数据准备.生产者信息.投票等能力.本篇文章将会从源码角度详细研究system合约. 关键字:EOS,eosio.syst ...
- eos节点启动源码分析
在eos源码目录中programs/nodeos/main.cpp文件里,为节点启动的主函数main函数内部做了两件事1 初始化 application if(!app().initialize< ...
- nginx源码分析--使用GDB调试(strace、 pstack )
nginx源码分析--使用GDB调试(strace. pstack ) http://blog.csdn.net/scdxmoe/article/details/49070577
随机推荐
- 关于Python的面试题
Python语言特性 1 Python的函数参数传递 看两个例子: a = 1 def fun(a): a = 2 fun(a) print a # 1 a = [] def fun(a): a.ap ...
- 20172321 20172333 2017-2018 暑假作业APP
20172321 20172333 2017-2018 暑假作业APP 项目介绍 项目成员 吴恒佚 20172321 严域俊 20172333 项目简介 从理论上来说,这是一个贪吃蛇游戏. <贪 ...
- 20172325 2016-2017-2 《Java程序设计》第四周学习总结
20172325 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 1.对类.对象.声明变量的定义和属性有了进一步的了解 2.学会如何编写一个类并运用到需要的程 ...
- Java基础第一节.Java简介
第一节 Java简介 Java是一个由Sun公司开发而成的新一代的编程语言. Java语言是对软件开发有深远影响.应用前景广泛.具有丰富的类库.继承了C++的传统(摈弃了某些不足)广泛使用的网络编程语 ...
- Software Defined Networking(Week 2, part 2)
History of SDN 1.3 - 1.4 课程地址 Network Virtualization 网络可虚拟化,可以说是SDN的一项核心内容,同样也源自很多先前的技术和思想.我们先讨论何为网络 ...
- nodeJS + webStrome
一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...
- 福州大学软工1816 K 班助教总结
春节时期总有各种诱惑因素(例如路人超能第二季),拖到现在才发布十分抱歉orz. 一.感谢 首先对柯老师和软工助教指导团队这一学期以来的支持和指导表示感谢.第一次做助教,有时候会提出一些不大成熟的想法, ...
- opencv的安装和卸载
安装 测试环境为centos 安装依赖 yum install cmake gcc gcc-c++ gtk2-devel gimp-develgimp-devel-tools gimp-help-br ...
- angularJS1笔记-(12)-自定义指令(compile/link)
index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- JavaWeb基础【1】—— Tomcat
此笔记是学习黑马程序员JavaWeb系列视频的课堂笔记. 感谢黑马程序员. 一.Tomcat概述 Tomcat服务器由Apache提供,开源免费.由于Sun和其他公司参与到了Tomcat的开发中,所以 ...