eos源碼分析和應用(一)調試環境搭建


轉載自 http://www.limerence2017.com/2018/09/02/eos1/#more

eos基於區塊鏈技術實現的開源引擎,開發人員可以基於該引擎開發DAPP(分布式應用)。下面搭建在windows環境下的虛擬機,並且安裝eos引擎,以及配合vscode實現斷點調試。

創建vmware虛擬機安裝ubuntu系統

去下載vmware虛擬機,然后安裝。
vmware虛擬機鏈接地址
ubuntu系統下載16.04版本以上的,下載地址
ubuntu下載地址
下面創建虛擬機,選擇創建一個新的虛擬機
創建虛擬機
選擇自定義
自定義
按步驟
選擇稍后安裝系統鏡像
4.png
操作系統選擇linux
5.png
安裝位置自己設定
6.png
設置處理器數量,根據自己機器酌情設置
7.png
內存設置,eos編譯要求至少7G內存,我設置8G,如果機器內存不夠,可以設置小一點,之后改eos_build.sh中的設置就可以。
8.png
網絡設置走默認就行
9.png
10.png
11.png
12.png
存儲空間我設置了80G,根據自己機器設置,至少40G空間
13.png
虛擬機數據存放位置
14.png
15.png
虛擬機安裝好了
16.png
點擊編輯虛擬機設置,點擊cd/dvd ,選擇使用ISO映像文件
17.png
確定后,點擊運行虛擬機,自動安裝ubuntu,ubuntu具體安裝選擇不做贅述。

編譯eos,運行eos

1 進入自己用戶目錄,創建文件夾,然后clone 代碼
git clone https://github.com/EOSIO/eos--recursive
18.png
2 下載后進入eos目錄,執行eosio_build.sh腳本,出現如下顯示,則編譯成功。
我輸入sudo ./eosio_build.sh, 等待編譯完成
19.png
如果出現boost ,mongodb等下載失敗,無法執行成功,那么修改eos/scripts/eosio_build_ubuntu.sh,注釋掉connect下載等操作,然后手動下載放入eos查找的目錄即可。同樣的道理,內存不足7G,空間不足40G,eosio_build_ubuntu.sh腳本會exit,注釋掉exit代碼即可繼續編譯。
編譯成功后,可以執行以下命令運行節點,當前目錄為eos

 1 cd ./build/programs/nodeos 2 ./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 = 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 = 47.105.111.1:7771
p2p-peer-address = 192.168.1.59:7771
#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

 


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
  }
}

 


這樣直接執行就可以了 

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項目。
20.png
1 配置任務,如圖所示菜單路徑:任務->配置任務,選擇使用模板創建tasks.json文件,MSBuild執行生成目標。
在eos工程目錄下創建一個tasks.json文件,並打開,如下所示
21.png
按照如下修改配置

{
    // 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文件,如下圖 

22.png
修改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中修改代碼編譯
23.png
在main函數處設置斷點
4 菜單:調試->啟動調試或F5
24.png
程序運行到斷點處暫停,可以F10單步調試,也可以F5跳過繼續運行下一個節點,左側Debug目錄點擊,可以看到調用的堆棧信息和變量信息。
到此為止,eos編譯運行,以及調試環境搭建完了。下一篇源碼分析,eos整個流程運行機制。
謝謝關注我的公眾號
1.jpg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM