根据我一贯的学习经验,学习开源代码的话,单单看是不够的,必须一边看一边调试才能尽快理解,所以我们要想法搭建windows下bitcoin源码的调试环境。

紧接着昨天的进度,想要调试linux下的比特币源码,我们首先要打通调试器到linux下的通道(我想大部分人应该跟我一样对gdb深恶痛绝吧,笑),这就需要能够以ssh连接的方式连上本机的linux。

以ssh连接的方式连上本机的linux

第一步,修改linux的ssh连接参数,打开sshd_config文件修改配置参数,文件位于

C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\etc\ssh\sshd_config

加入以下几项

Port    #设置ssh的端口号, 由于22在windows中有别的用处, 尽量不修改系统的端口号
PermitRootLogin yes # 可以root远程登录
PasswordAuthentication yes # 密码验证登录
AllowUsers sky # 远程登录时的用户名,如果你直接使用root用户这条可以不加

第二步,打开wsl的linux窗口,重启本机linux的ssh服务

sudo service ssh --full-restart

我在这里重启失败了,系统提示:

root@SD-:/etc/ssh# sudo service ssh --full-restart
* Stopping OpenBSD Secure Shell server sshd [ OK ]
* Starting OpenBSD Secure Shell server sshd Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key

这是由于我的openssl安装有问题导致的,执行以下两行代码重新安装即可

$ sudo rm -r /etc/ssh/ssh*key
$ sudo dpkg-reconfigure openssh-server

重新安装后,因为配置文件也被一并重置了,所以还需要重新走一遍第一步才行,这里不再赘述。

第二遍重启后成功,打开xshell,输入127.0.0.1和端口号用户名密码,提示连接成功,如下图所示

注意:WSL默认是不会自动开启SSH服务的,如果想改成自启动,需要执行命令:

ln -s /etc/init.d/ssh /etc/rc3.d/S100ssh

如何调试比特币源码

我这边主要是用vs2015+visual gdb的方式编译调试

VS的安装对于大部分程序员来说都不陌生,这里就不详细说明,不熟悉者可自行百度相关资料安装。然后就是Visual GDB的安装了,其前提是大家已经完成了VS的安装。下面是VisualGDB5.3的下载链接:

链接:https://pan.baidu.com/s/1dvc8dovVioc2HWbZuqkTzA 密码:3etx

下载完成后包含如下两个文件:

 

下载完之后点击安装VisualGDB-5.3-preview6.msi,安装完之后记得点击PatchVisualGDB.exe。

在完成了Visual GDB的安装之后,在Visual Studio 2010的“项目”选项中会增加“Visual GDB”模板,该模板的工程中会可以看到“Linux Project Wizard”工程。此时表明Visual GDB已安装成功。

 

下载完之后点击安装VisualGDB-5.3-preview6.msi,安装完之后记得点击PatchVisualGDB.exe。

在完成了Visual GDB的安装之后,在Visual Studio 2010的“项目”选项中会增加“Visual GDB”模板,该模板的工程中会可以看到“Linux Project Wizard”工程。此时表明Visual GDB已安装成功。

Visual GDB中头文件、链接库等基本设置大家可以参照《VisualGDB的基本使用》这篇文章来学习和操作,其链接如下:

https://blog.csdn.net/RichardWQJ/article/details/79872178

调试工程搭建

在完成了VS+VisualGDB的安装后,我们就可以开始调试比特币源码了,当然在调试比特币源码之前我们需要先编译好比特币源码,并生成bitcoind等执行程序,关于比特币源码的编译大家可以参考我的另一篇文章《聊聊比特币(Bitcoin)客户端源码编译那些事》。如果比特币源码已编译好,我们可以正式开始搭建比特币的调试之旅了。

第一步是新建Linux工程,具体是打开VS->文件菜单->新建->项目->模板->VisualGDB->Linux Project Wizard,在名称处填写“bitcoin”,如图所示:

 

下一步点击“确定”,进入项目类型选择界面:

 

下一步点击“Import a project”选项,默认选择“Import a project built with other tools”。

 

点击下一步进入“远程计算机选择”界面,如图所示:

 

在该界面中,我们需选择要调试比特币程序所在Linux计算机,在上图中我们可以看到已有一个默认的远程计算机,这个是之前连接过的远程计算机,开发环境默认记录的地址,如果要选择新的远程计算机,则需点击下方的“Deploy the project to another Linux

computer”,然后点击“Deployment computer”的下拉框,弹出如下所示页面:

 

然后点击“Create a new SSH connection”选项,弹出远程计算机信息填写页面,具体填写内容如下:

 

填写完成后,点击“Create”,然后等待验证,如果验证成功则返回前页面,此刻继续点击“Next”即可,进入源码选择页面,在该页面中我们点击源码目录选择按钮,在弹出的对话框中会弹出远程Linux计算机的文件目录,我们在此找到比特币源码所在目录即可。

 

然后,继续下一步进入源码访问模式页面,即源码是远程访问,还是在本地拷贝一份,此处建议选择“Copy sources locally and upload modified

files during build”选项。然后点击下一步,会在将文件拷贝至本地工程目录下,该过程需要一点时间,等待源码下载完成即可。

文件拷贝结束后,进入“编译和调试”页面,在此处我们主要是找到编译好的bitcoind执行文件,找到该文件后,点击“Finish”即可实现调试工程的搭建。

 

开始调试

在完成调试工程搭建后,我们在Visual Studio中可以看到创建的工程,在该工程中还包含了从远程计算机中拷贝过来的源码,其效果如图:

 

此时我们可以打开源码,并设置断点,程序运行时我们就可以在断点处进行调试了。

我们知道比特币程序在启动时可以设置相应的参数,我们在看比特币源码时也会遇到不同参数状态下,比特币程序执行不同的代码,现在有了调试方法,我们可以更直观得理解这些参数的意义了,那么这些参数在调试工程中如何设置呢?我们选中调试工程,点击右键,在弹出的菜单中选择“VisualGDB Project Properties”选项,然后在弹出的对话框中找到“Debug Setting”页面,在该页面中找到“Main executable arguments”项,在其后的编辑框中填入相应的参数,各参数之间以空格隔开即可。

 

 

在完成了相应参数设置后,我们就可以启动比特币程序进行调试了。具体调试方法可详细参见Visual Studio的调试方法。

本文借鉴文章:

https://www.jianshu.com/p/2100f734d6a7?utm_source=oschina-app

比特币学习笔记(二)---在windows下调试比特币源码的更多相关文章

  1. 《Lucene in Action第二版》学习总结---如何在Windows下编译luceneinAction2Edition源码包

    1. 下载此源码包,位置是: www.manning.com/hatcher3,得到:lia2e.tar.gz,然后解压缩得到目录:lia2e,为了以后能辨识,我将此目录改名为:luceneinAct ...

  2. Docker学习笔记二(linux下安装Docker)

    Docker学习笔记二(linux下安装Docker) 1.在线安装linux Docker 这种方式首先要保证linux 环境下可以上网,当然,小编是在自己的电脑上安装了虚拟机,在虚拟机上安装了,l ...

  3. VS2010下调试.NET源码

    微软走向开源,是时候用vs去单步调试进入源码了.参考地址:http://blog.csdn.net/waxgourd0/article/details/6600182 可供参考的文章:https:// ...

  4. Windows下编译live555源码

    Windos下编译live555源码 环境 Win7 64位 + VS2012 步骤 1)源码下载并解压 在官网上下载最新live555源码,并对其进行解压. 2)VS下建立工程项目 新建Win32项 ...

  5. Maven 依赖调解源码解析(二):如何调试 Maven 源码和插件源码

    本文是系列文章<Maven 源码解析:依赖调解是如何实现的?>第二篇,主要介绍如何调试 Maven 源码和插件源码.系列文章总目录参见:https://www.cnblogs.com/xi ...

  6. [Laravel 5 教程学习笔记] 一、Windows下安装Laravel 5

    最近看到一些统计,说是Laravel是目前PHP框架中使用最多的,所以就想来学习下.之前其实也想过学习这个框架,但是每次到第一步安装的时候就卡住了,无奈  .之前用ThinkPHP的时候,下载完放到网 ...

  7. Spark学习笔记--Spark在Windows下的环境搭建

    本文主要是讲解Spark在Windows环境是如何搭建的 一.JDK的安装 1.1 下载JDK 首先需要安装JDK,并且将环境变量配置好,如果已经安装了的老司机可以忽略.JDK(全称是JavaTM P ...

  8. Spark学习笔记--Spark在Windows下的环境搭建(转)

    本文主要是讲解Spark在Windows环境是如何搭建的 一.JDK的安装 1.1 下载JDK 首先需要安装JDK,并且将环境变量配置好,如果已经安装了的老司机可以忽略.JDK(全称是JavaTM P ...

  9. Windows下 Robhess SIFT源码配置

    Robhess OpenSIFT 源码下载:传送门 为了进一步学习SIFT,选择论文就着代码看,在VS2013.OpenCV2.4.13下新建项目,跑一跑经典之作.由于将代码和Opencv配置好后还会 ...

随机推荐

  1. 提高github下载速度的方法【100%有效】可达到2MB/s

    因为大家都知道的原因,在国内从github上面下载代码的速度峰值通常都是20kB/s.这种速度对于那些小项目还好,而对于大一些的并且带有很多子模块的项目来讲就跟耽误时间.而常见的的方法无非就是修改HO ...

  2. python命令之m参数

    在命令行中使用python时,python支持在其后面添加可选参数. python命令的可选参数有很多,例如:使用可选参数h可以查询python的帮助信息: 可选参数m 下面我们来说说python命令 ...

  3. 指针版的PStash(用一个void指针数组, 来保存存入元素的地址) 附模板化实现 p321

    由容器PStash的使用者,负责清除容器中的所有指针.所以用户必须记住放到容器中的是什么类型,在取出时,把取出的void指针转换成对应的类型指针,然后 'delete 转换后的对象指针',才能在清除时 ...

  4. 2018-8-10-win10-uwp-使用-Geometry-resources-在-xaml

    title author date CreateTime categories win10 uwp 使用 Geometry resources 在 xaml lindexi 2018-08-10 19 ...

  5. vue 打包后,页面空白及图片路径的问题

    打包之后打开dist的页面显示空白: 1.记得改一下config下面的index.js中bulid模块导出的路径. 这里需要将 assetsPublicPath: '/'改为assetsPublicP ...

  6. 写一个js配合rem

    rem.js 目前笔者解决移动端的尺寸带来的样式问题,都是通过viewport + rem的.viewport 相信大家都用过了,而rem需要用js动态设置html的字体大小. 动态设置rem的根字体 ...

  7. H3C 静态路由实现路由备份和负载分担

  8. UVA 12563 "Jin Ge Jin Qu hao" (背包)

    传送门 debug了好一会,突然发现,输出错了,emmm......... 明天再写debug历程: (PS:ipad debug是真的繁琐) 题意: 题解: 尽管题干中给的 t 的范围很大,但是 t ...

  9. WPF 托盘显示

    本文告诉大家如何在 WPF 实现在托盘显示,同时托盘可以右击打开菜单,双击执行指定的代码 NotifyIcon WPF 通过 Nuget 安装 Hardcodet.NotifyIcon.Wpf 可以快 ...

  10. vue+element-ui实现分页

    我使用得是el-table+el-pagination来实现的, 话不多说,直接上代码 html代码部分 <!-- table --> <el-table :data="s ...