hyperledger fabric 1.0.5 分布式部署 (八)
gdb debug peer 程序
在开始我们从 github 上download 下来的源码包,实际上已经包含了可执行的 peer 程序,但是该程序是使用 release 方式编译的,并不支持gdb 直接debug,所以我们需要对源码从新编译peer。
在开始编译前,读者应该了解,由于“神秘的东方力量”,程序试图从golang 库中download 安装包时,需要“科学上网”。
假设 fabric 的源码被download 在 /opt/gopath/src/github.com/hyperledger/fabric,切换到该目录后,对 Makefile 进行修改,加入debug 编译(大约360行),红色部分为修改的内容。
传递参数-ldflags "-s",忽略debug的打印信息;传递-gcflags "-N -l" 参数,这样可以忽略Go内部做的一些优化,聚合变量和函数等优化,这样对于GDB调试来说非常困难,所以在编译的时候加入这两个参数避免这些优化。
release/%/bin/peer: $(PROJECT_FILES)
@echo "Building $@ for $(GOOS)-$(GOARCH)"
mkdir -p $(@D)
$(CGO_FLAGS) GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags "-s" -gcflags "-N -l" -o $(abspath $@) -tags "$(GO_TAGS)" -ldflags "$(GO_LDFLAGS)" $(pkgmap.$(@F))
编译 peer 执行,编译成功后,peer 将在 build/bin/peer
make peer
作者在第一次编译时,还会遇到 protoc-gen-go 命令找不到的问题,错误信息如下
mkdir -p build/image/ccenv/payload
cp build/docker/gotools/bin/protoc-gen-go build/bin/chaintool build/goshim.tar.bz2 build/image/ccenv/payload
cp: cannot stat 'build/docker/gotools/bin/protoc-gen-go': No such file or directory
Makefile:: recipe for target 'build/image/ccenv/payload' failed
make: *** [build/image/ccenv/payload] Error
解决方式是自己安装后拷贝到 build/docker/gotools/bin/ 目录,然后再次执行编译 peer 的命令
cd $GOPATH/src/github.com/golang/
git clone https://git.oschina.net/mellymeng/protobuf.git
go get -u github.com/golang/protobuf/protoc-gen-go
cd $GOPATH
cp bin/protoc-gen-go /opt/gopath/src/github.com/hyperledger/fabric/build/docker/gotools/bin/
编译peer ok 后,按照 hyperledger fabric 1.0.5 分布式部署 (七)介绍的设置环境变量
export CORE_PEER_TLS_ROOTCERT_FILE="/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" ; \
export CORE_PEER_LOCALMSPID="Org1MSP" ; \
export CORE_PEER_TLS_ENABLED=true ; \
export CORE_PEER_TLS_KEY_FILE="/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key" ; \
export CORE_PEER_MSPCONFIGPATH="/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" ; \
export CORE_PEER_ADDRESS="peer0.org1.example.com:7051" ;
使用gdb 启动 peer 程序
gdb build/bin/peer
给 gdb 加入 go 的调试信息,假设 golang 安装在 /opt/go 目录
source /opt/go/src/runtime/runtime-gdb.py
在gdb 中设置peer 的运行参数
set args chaincode query -C mychannel -n mycc --logging-level CRITICAL -c '{"Args":["cert"]}'
在 gdb 中设置断点,例如
b /opt/gopath/src/github.com/hyperledger/fabric/peer/chaincode/common.go:
然后在gdb 执行 run 命令
run
此时gdb 将进入 common.go 程序的99 行,该函数是啥内容呢?peer 处理 chaincodeInvokeOrQuery 的函数。
Breakpoint at 0xb2cd20: file /opt/gopath/src/github.com/hyperledger/fabric/peer/chaincode/common.go, line .
(gdb) run
Starting program: /opt/gopath/src/github.com/hyperledger/fabric/build/bin/peer chaincode query -C mychannel -n mycc --logging-level CRITICAL -c '{"Args":["cert"]}'
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff73e1700 (LWP )]
[New Thread 0x7ffff6be0700 (LWP )]
[New Thread 0x7ffff63df700 (LWP )]
[New Thread 0x7ffff5a7e700 (LWP )]
[New Thread 0x7ffff527d700 (LWP )]
[Switching to Thread 0x7ffff6be0700 (LWP )] Thread "peer" hit Breakpoint , github.com/hyperledger/fabric/peer/chaincode.chaincodeInvokeOrQuery (cmd=0xc420253200, args= []string, invoke=false, cf=0xc4201833b0,
err=...) at /opt/gopath/src/github.com/hyperledger/fabric/peer/chaincode/common.go:
func chaincodeInvokeOrQuery(cmd *cobra.Command, args []string, invoke bool, cf *ChaincodeCmdFactory) (err error) {
参考博客:
https://stackoverflow.com/questions/41040156/cp-cannot-stat-build-docker-gotools-bin-protoc-gen-go-no-such-file-or-direct
http://blog.csdn.net/iflow/article/details/77951610
http://blog.studygolang.com/2012/12/gdb%E8%B0%83%E8%AF%95go%E7%A8%8B%E5%BA%8F/
hyperledger fabric 1.0.5 分布式部署 (八)的更多相关文章
- hyperledger fabric 1.0.5 分布式部署 (七)
fabric 使用 fabric-ca 服务 准备部分 首先需要用户从github上download fabric-ca 的工程代码 cd $GOPATH/src/github.com/hyperle ...
- hyperledger fabric 1.0.5 分布式部署 (六)
如何在相同的peer 节点上创建多个 channel 作者在hyperledger fabric 1.0.5 分布式部署 (五)已经向读者们介绍了一个简单的fabric 的部署流程,那么根据上一篇博客 ...
- hyperledger fabric 1.0.5 分布式部署 (五)
梳理fabric e2e_cli 测试程序的具体步骤 作者在 hyperledger fabric 1.0.5 分布式部署 (一)中给读者们介绍了如何从零开始部署一个测试的 demo 环境,如果细心的 ...
- hyperledger fabric 1.0.5 分布式部署 (四)
chaincode 的开发 作者在hyperledger fabric 1.0.5 分布式部署 (三)中向读者介绍了如何开发fabric 的chaincode,那么实际上chaincode 还有其他的 ...
- hyperledger fabric 1.0.5 分布式部署 (二)
环境:2台 ubuntu 16.04 角色列表 角色 IP地址 宿主端口 docker端口 peer0.org1.example.com 47.93.249.250 7051 7051 pe ...
- hyperledger fabric 1.0.5 分布式部署 (三)
本篇博客主要是向读者介绍 fabric 在部署时的一些细节,还有作者自己学习过程中的心得. 初始化相关密钥的程序,实际上是一个shell脚本,并且结构特别简单 generateArtifacts.sh ...
- hyperledger fabric 1.0.5 分布式部署 (一)
环境是个人虚拟机ubuntu 16.04 64 位版本 前期用户需要先安装好:gcc.g++.git 软件 安装 golang 首先给环境安装一个 go 语言环境,版本最好在1.8 以上 golang ...
- hyperledger fabric 1.0.5 分布式部署 (九)
linux 使用vim.ctags 配置fabric 源码阅读环境 首先需要安装 ctags,作者使用apt-get 来安装的,安装的版本是5.9 apt-get install ctags 5.9 ...
- Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群生产部署
6.1.平台特定使用的二进制文件配置 该方案与Hyperledger Fabric 1.0 从零开始(五)--运行测试e2e类似,根据企业需要,可以控制各节点的域名,及联盟链的统一域名.可以指定单独节 ...
随机推荐
- TensorFlow Action(开山使用篇)
1.TensorFlow安装: 使用pip install tensorflow安装CPU版: 或使用pip install tensorflow-gpu==1.2.1指定版本安装GPU版. 2.Te ...
- bzoj5093: [Lydsy1711月赛]图的价值
不难想到考虑每个点的贡献,ans=n*sigema(1~n)i C(n-1,i)*(2^C(n-1,2))*i^k 直接套第二类斯特林拆柿子即可.提示:sigema(1~n)i C(n,i)*C(i, ...
- POJ 之 WERTYU
WERTYU Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8371 Accepted: 4007 Descriptio ...
- 标准兼容HTML5输入框提示信息的插件iHolder_v0.1.06.21.2014_预览版
由于版面限制,简单说下,详细的内容及在线预览.预览版压缩包,见这里http://levi.cg.am/archives/3507 为什么说是标准兼容: 因为大多数placeholder插件是这样兼容的 ...
- ps炫光素材
炫光闪电笔刷,炫光闪电笔刷,雷电笔刷,自然闪电Photoshop笔刷下载ps炫光素材 素材下载:http://www.huiyi8.com/sc/8695.html
- codeforces 659G G. Fence Divercity(dp)
题目链接: G. Fence Divercity time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- POJ3107Godfather(求树的重心裸题)
Last years Chicago was full of gangster fights and strange murders. The chief of the police got real ...
- ACM学习历程—HDU1392 Surround the Trees(计算几何)
Description There are a lot of trees in an area. A peasant wants to buy a rope to surround all these ...
- MongoDB中的一些坑(最好不要用)
MongoDB 是目前炙手可热的 NoSQL 文档型数据库,它提供的一些特性很棒:如自动 failover 机制,自动 sharding,无模式 schemaless,大部分情况下性能也很棒.但是薄荷 ...
- Mesos以及Marathon安装总结
安装了将近一周的环境了,终于把Mesos以及Marathon给安装上了,我指的离线安装. 策略1: 严格的按照官网的流程: http://mesos.apache.org/gettingstarted ...