2018-11-09 EOS開發(fā)調(diào)試環(huán)境搭建(全部流程)

本貼適用于: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)載請附上博文鏈接旁振!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涨岁,隨后出現(xiàn)的幾起案子拐袜,更是在濱河造成了極大的恐慌,老刑警劉巖梢薪,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹬铺,死亡現(xiàn)場離奇詭異,居然都是意外死亡秉撇,警方通過查閱死者的電腦和手機甜攀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畜疾,“玉大人,你說我怎么就攤上這事印衔》却罚” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵奸焙,是天一觀的道長瞎暑。 經(jīng)常有香客問我彤敛,道長,這世上最難降的妖魔是什么了赌? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任墨榄,我火速辦了婚禮,結(jié)果婚禮上勿她,老公的妹妹穿的比我還像新娘袄秩。我一直安慰自己,他們只是感情好逢并,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布之剧。 她就那樣靜靜地躺著,像睡著了一般砍聊。 火紅的嫁衣襯著肌膚如雪背稼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天玻蝌,我揣著相機與錄音蟹肘,去河邊找鬼。 笑死俯树,一個胖子當(dāng)著我的面吹牛帘腹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聘萨,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竹椒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了米辐?” 一聲冷哼從身側(cè)響起胸完,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翘贮,沒想到半個月后赊窥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡狸页,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年锨能,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芍耘。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡址遇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斋竞,到底是詐尸還是另有隱情倔约,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布坝初,位于F島的核電站浸剩,受9級特大地震影響钾军,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绢要,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一吏恭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧重罪,春花似錦樱哼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惨篱,卻和暖如春盏筐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砸讳。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工琢融, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人簿寂。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓漾抬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親常遂。 傳聞我的和親對象是個殘疾皇子纳令,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容