本貼適用于:Linux-ubuntu16.04版本和mac-osx 10.12+版本
一、最新代碼編譯構(gòu)建
1语泽、從github上克隆代碼倉庫到本地
[plain]?view plain?copy
git?clone?https://github.com/EOS-Mainnet/eos??
2膨蛮、更新代碼倉庫子模塊诅炉,使用遞歸參數(shù)
[plain]?view plain?copy
git?submodule?update?--init?--recursive??
3驻襟、git tag命令查看版本標(biāo)簽,下拉找到mainnet-1.0.4,以后再升級新的版本真友,在代碼本地倉庫目錄下git pull,再git tag挪鹏,就能找到最新版本见秽。
4、git checkout 命令檢出mainnet-1.0.4版本代碼
git checkout mainnet-1.0.4
注意:我的系統(tǒng)里因為原來已經(jīng)有本地代碼倉庫讨盒,版本是mainnet-1.0.3解取,而且代碼有修改,所以當(dāng)我git checkout的時候提示先提交修改過的代碼或把修改過的文件stash催植,然后再git chekcout肮蛹。因為我提交不了代碼,所以只能選擇:get stash创南,然后再git checkout伦忠。這樣就可以成功檢出最新版本代碼:mainnet-1.0.4「逭蓿可以使用git branch命令檢查一下檢查代碼是否成功昆码。
正當(dāng)我寫這篇貼的時候,BM團(tuán)隊為解決mainnet-1.0.4版本有節(jié)點停止出塊的問題邻储,緊急升級到了mainnet-1.0.5版本赋咽,收到消息,我git pull吨娜,拉取最新倉庫脓匿,git tag,果然mainnet-1.0.5已經(jīng)存在了宦赠,所以我又進(jìn)行了git checkout mainnet-1.0.5的操作陪毡,接下來就在1.0.5的版本上搞事情吧,永遠(yuǎn)保持最新勾扭!
5毡琉、執(zhí)行自動化構(gòu)建腳本。
./eosio_build.sh
如果是首次編譯構(gòu)建代碼妙色,過程中可能會遇到一些坑:
比如:boost庫下載失敗或安裝失敗桅滋,mongodb以及mongodb驅(qū)動下載失敗,可以從我的百度網(wǎng)盤下載:
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身辨,視你的操作系統(tǒng)而定丐谋,把下載的文件放到合適的位置,把如下圖所示的下載過程注釋掉煌珊,再進(jìn)行編譯笋鄙。
還有如果你安裝的是ubuntu的虛擬機,自動化編譯過程可能會因為主機物理內(nèi)存小于7G怪瓶,而報錯編譯失敗萧落,這個問題可以通過修改eos/scripts/eosio_build_ubuntu.sh腳本中的第27-31行践美,注釋掉這5行,如下圖:
初次構(gòu)建由于要下載安裝一堆的依賴庫找岖,時間會很長陨倡,大概2-3個小時,耐心等待吧许布!
如果以前已經(jīng)多次編譯成功兴革,依賴庫就不會被重新下載安裝,應(yīng)該會很順利蜜唾。
6杂曲、為了后續(xù)操作方便,可以安裝一下袁余,省的每次啟動nodeos或敲cleos命令行都要切換目錄
[plain]?view plain?copy
sudo?make?install??
7擎勘、config.ini文件內(nèi)容如下,可以參考。
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文件內(nèi)容棚饵,可參考。
{
? "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前注意:清理舊的數(shù)據(jù)
二、使用vscode 開發(fā)工具對代碼進(jìn)行單步調(diào)試且蓬,查看堆棧調(diào)用
1欣硼、在mac-osx系統(tǒng)和ubuntu中都可以使用vscode對c++代碼進(jìn)行開發(fā)編輯和調(diào)試,vscode工具下載安裝略過恶阴,請百度分别。
2、這里只說單步調(diào)試和查看堆棧調(diào)用存淫,所以需要打開eosio_build.sh腳本,把第51行CMAKE_BUILD_TYPE=Release修改成CMAKE_BUILD_TYPE=Debug沼填,執(zhí)行./eosio_build.sh
./eosio_build.sh
3桅咆、編譯完成后,打開vscode坞笙,打開文件夾岩饼,選擇eos代碼主目錄,選擇打開
4薛夜、配置任務(wù)籍茧,如圖所示菜單路徑:任務(wù)->配置任務(wù)
5、使用模板創(chuàng)建tasks.json文件
6梯澜、MSBuild執(zhí)行生成目標(biāo)
7寞冯、mscode會在eos工程目錄下創(chuàng)建一個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俭茧、菜單:調(diào)試->添加配置...
10、vscode會在eos工程目錄下創(chuàng)建launch.json文件漓帚,如下圖
11母债、按照下圖修改launch.json文件
{
? ? // 使用 IntelliSense 了解相關(guān)屬性。
? ? // 懸停以查看現(xiàn)有屬性的描述尝抖。
? ? // 欲了解更多信息毡们,請訪問: 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、菜單:任務(wù)->運行任務(wù)
13昧辽、輸入或選擇eosio_build
14衙熔、如下圖所示,vscode會執(zhí)行一次代碼編譯奴迅,以后修改代碼后青责,可以直接在這里執(zhí)行編譯。
15取具、編譯完成后可以在programs/nodeos/main.cpp的main函數(shù)里下個斷點脖隶,如下圖所示
16、菜單:調(diào)試->啟動調(diào)試或F5暇检,片刻后系統(tǒng)會啟動一個新的終端控制臺产阱,顯示nodes的運行,因為我們設(shè)置了斷點块仆,所以程序會停在斷點處构蹬,終端顯示的nodeos程序也會暫停在下面的狀態(tài)。
17悔据、nodeos程序停在斷點處庄敛,如下圖所示
18、按F5繼續(xù)運行到下個斷點科汗,因為下個斷點還沒設(shè)置藻烤,所以nodeos程序開始不間斷執(zhí)行,如下圖所示
18头滔、按照下圖所示打開plugins->chain_plugin->chain_plugin.cpp,在get_info函數(shù)中(598)行下個斷點
19怖亭、打開一個新的終端控制臺程序,輸入cleos get info命令坤检,如下圖所示
20兴猩、控制臺輸入:cleos get info命令后回車,屏幕會自動跳到vscode代碼編輯窗口早歇,斷點調(diào)試指示器游標(biāo)會停在598斷點處倾芝,如下圖所示
21讨勤、打開左邊欄的debug面板,如下圖
22蛀醉、左邊欄可以看到:變量悬襟、監(jiān)視、調(diào)用堆棧拯刁、斷點4個標(biāo)簽分欄脊岳。變量一欄可以查看當(dāng)前調(diào)試文件下的全局和局部變量,監(jiān)視一欄可以查看添加到監(jiān)視器里的變量的變化情況垛玻,調(diào)用堆棧一欄可以看到割捅,從程序開始運行到斷點處的所有命名空間、類帚桩、函數(shù)的調(diào)用關(guān)系亿驾,斷點一欄顯示所有已打的斷點,可以操作使斷點有效或無效账嚎,或刪除斷點莫瞬。
23、下圖顯示如何把一個變量添加到監(jiān)視器
24郭蕉、調(diào)試過程
25疼邀、get info 命令調(diào)試結(jié)束
26、停止調(diào)試
---------------------
作者:kevin昆
來源:CSDN
原文:https://blog.csdn.net/caokun_8341/article/details/80713851
版權(quán)聲明:本文為博主原創(chuàng)文章召锈,轉(zhuǎn)載請附上博文鏈接旁振!