2.5 visual studio调试nodeos

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.5 visual studio调试nodeos相关的知识,希望对你有一定的参考价值。

2.5.1 前言

  Visual Studio在调试c++程序时,调式信息通是过界面的方式展示出来的,这很方便了我们的开发人员,那么如果只有源代码,而没有把源代码创建成解决方案,比如,linux环境下的C++工程,没有Visual Studio的解决方案工程,那么如何快速的调式这个项目呢?

  Visual Studio提供了打开一个代码文件夹,配置一些详细信息来运行和调试文件夹中的代码。下面将详细介绍如何通过打开文件夹的代码开始调式程序。

2.5.2 原理介绍

  Visual Studio能够通过打开文件夹的代码开始调式程序,相当于Visual Studio和linux系统之间通过配置信息建立了某些映射关系,通过windows下和linux下的目录使用同一份代码进行调式,将linux系统下调式结果传输到Visual Studio中,展示出来。

打开文件夹进行调试通过 .json 文件来自定义配置信息:
tasks.vs.json 指定自定义生成命令和编译器开关,以及任意(与非生成相关)任务。
通过“解决方案资源管理器”右键单击菜单项“配置任务”进行访问。
launch.vs.json 指定用于调试的命令行参数。
通过“解决方案资源管理器”右键单击菜单项“调试和启动设置”进行访问。

这些.json文件位于代码库根文件夹中一个名为.vs的隐藏文件夹中。 当你在“解决方案资源管理器”中的文件或文件夹上选择“配置任务”或“调试和启动设置”时,Visual Studio 会根据需要创建 tasks.vs.json 和 launch.vs.json 文件。

tasks.vs.json

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskName": "任务-eos",
      "appliesTo": "/",
      "type": "launch"
    }
  ]
}

taskName : 指定右键单击菜单中显示的名称
appliesTo : 指定可在其中执行命令的文件
type : 指用于调试的代码库的配置文件类型

launch.vs.json

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "cppdbg",
      "name": "E:\\work\\eos\\source\\stable code\\eos-v1.6.3\\eos",
      "project": "",
      "cwd": "/root/eos/eos/",
      "program": "/root/eos/eos/build/programs/nodeos/nodeos",
      "MIMode": "gdb",
      "externalConsole": true,
      "remoteMachineName": "192.168.3.231",
      "pipeTransport": {
        "pipeProgram": "${debugInfo.shellexecPath}",
        "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
        "debuggerPath": "/usr/bin/gdb"
      },
      "setupCommands": [
        {
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "visualizerFile": "${debugInfo.linuxNatvisPath}",
      "showDisplayString": true
    }
  ]
}

name : 指windows下的代码目录
cwd : 指linux下的代码目录
program : 指linux下的代码编译成功后的执行程序
MIMode : 指使用gdb方式调式
remoteMachineName : 远程配置的主机名

2.5.3 环境准备

在调试之前我们需要以下环境并安装一些软件:
1.环境:win7及以上版本的操作系统,CentOS或ubuntu等任何一种linux操作系统;
2.安装软件:windows操作系统上安装VS2015及以上版本;linux系统上安装gcc、g++和gdbserver,ssh-server软件;

注意:
在linux系统上安装好ssh软件后,需要启动ssh-server服务,保证调式程序时,能将linux下的调试结果传回到Visual Studio的界面中。

ssh-server服务的启动命令:
CentOS系统 : systemctl start sshd
redhat系统 : service sshd start
ubuntu系统 : service ssh start

2.5.4 vs打开文件夹调试程序

我们以vs2017调试eos代码为例:

1.通过文件夹打开代码,vs界面中选择:文件->打开->文件夹,然后弹出下面的对话框,选择代码的路径;本机windows下的代码在E:\work\eos\source\stable code\eos-v1.6.3\eos中。
技术图片

打开文件夹后,代码工程如下:
技术图片

2.配置远程环境,这是我们程序运行的linux环境,需要在配置ssh远程访问,用于将调试结果传回vs界面。
vs界面中选择:工具->选项->跨平台->连接管理器,界面如下图所示:
技术图片

添加ssh远程访问连接配置:点击添加按钮,界面如下:
技术图片

3.生成配置任务 tasks.vs.json 文件,右键解决方案(eos),弹出如下窗口,选择"配置任务",如下图:
技术图片

tasks.vs.json 文件生成后,不需要修改其中的内容。
技术图片

4.设置“调试”和“启动”的launch.vs.json配置文件,右键解决方案(eos),弹出如下窗口,选择“调试”和“启动”设置,会弹出选择gdb的方式:
技术图片

需要选择远程机器的调试方式,我们选择C/C++ Launch for Linux(gdb) :
技术图片

点击选择按钮后,会弹出launch.vs.json文件,需要修改此文件:
原launch.vs.json文件:
技术图片

修改后的launch.vs.json文件如下:
技术图片

5.json配置文件生成和修改完成后,需要先在linux目录下,把程序编译成功,生成可执行文件,生成的可执行程序路径必须和launch.vs.json文件中program的配置路径程序一致。
然后就可以开始调式程序了,右键解决方案(eos),弹出如下窗口,选择“调试“,程序就开始启动调试了:
技术图片

至此,我们的程序就调试运行起来了,如下图:
技术图片

2.5.5 总结

程序不能正常启动调试的原因:
1.windows目录下的代码和linux目录下的代码不是同一份,导致启动调试异常。
2.linux下的程序需要编译成debug版本,否则不能正常启动调试。
3.launch.vs.json文件中remoteMachineName远程主机配置的不对或者ssh服务没有启动,导致不能正常启动调试。
4.launch.vs.json文件中program执行程序的路径和执行程序的名称配置不对,导致不能正常启动调试。

以上是关于2.5 visual studio调试nodeos的主要内容,如果未能解决你的问题,请参考以下文章

visual studio code(vscode) 调试php

Visual Studio调试方式详解

Visual Studio调试之断点技巧篇

visual studio 怎么编译

我可以在 Windows XP 上使用 Visual Studio 2010 远程调试器从 Visual Studio 2012 调试 .Net 4.0 应用程序吗?

Visual Studio 2015 远程调试(联调)