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执行程序的路径和执行程序的名称配置不对,导致不能正常启动调试。

原文地址:https://blog.51cto.com/14267585/2386636

时间: 2024-08-13 18:26:49

2.5 visual studio调试nodeos的相关文章

Visual Studio调试之避免单步跟踪调试模式

Visual Studio调试之避免单步跟踪调试模式 写完Visual Studio调试之断点进阶篇之后,想分享一下我常用的一些调试技巧,后面发现写之前,一些背景知识需要介绍一下. 下面是几篇今年2月份在CSDN写的几篇文章,比如关于如何使用第一次异常处理机会和第二次异常处理机会的区别来快速定位异常发生的位置,如何设置函数断点之类的文章.因为后续我打算写几篇我常用的小技巧,可能需要先了解一些背景知识,就只把链接贴出来了.理解First Chance和Second Chance避免单步调试:htt

Visual Studio调试之断点进阶篇

Visual Studio调试之断点进阶篇 在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常.程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler).IDT是操作系统在启动的时候初始化的,至于IDT的细节问题,例如什么是IDT,怎样编写一个IDT的例程,怎样 初始化IDT,可以去网上搜索一些资料. 总之,这里我们只要知

用Natvis定制C++对象在Visual Studio调试时如何显示

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Natvis定制C++对象在Visual Studio调试时如何显示.

Visual Studio调试之断点基础篇

原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/09/26/1574311.html 我曾经问过很多人,你一般是怎么调试你的程序的? F9, F5, F11, F-- 有很多书和文章都是介绍怎么使用Visual Studio编写WinForm啦,.ASP.NET之类的程序:知道如何编写固然重要,但是我觉得程序员可能只会花费30%的时间在编写代码上,剩下的大部分时间都是在调试程序.在网上看到很多人介绍Windbg的用法,但是没有看到几篇讲解

Visual Studio调试的10个技巧

本篇体验Visual Studio的10个调试技巧,包括: 1.插入断点和断点管理2.查看变量信息3.逐语句F11,逐过程F10,跳出Shift+F114.查看堆栈信息5.设置下一条执行语句6.调试时修改局部变量并继续调试7.线程管理8.为断点设置条件9.使用命令窗口测试方法10.变量的历史记录 有这样的一个Person类: public class Person { public string Name { get; set; } public int Age { get; set; } pu

新手必备!11个强大的 Visual Studio 调试技巧

简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总结了可能节省你大量时间的十个visual studio的调试技巧和方法. 1 悬停鼠标查看表达式值 调试是很有挑战性的.比如在函数内逐步运行可以看出哪里出错,查看堆栈信息可以知道函数被谁调用等等... 但是无论哪种情况下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)

Visual studio 调试连接数据库异常解决方法

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.Data.SqlClient.SqlException: 在

[转]Visual Studio调试之符号文件

http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶篇提到了调试符号文件及其作用,这篇文章我将要介绍调试符号文件的一些用法,如果你已经很熟悉调试文件的话,尽可以跳过本文. 调试符号文件为调试器提供了从二进制机器代码地址到源代码文本文件代码行的映射.因此有了符号文件,我们才能: 1.       设置断点,因为调试器需要符号文件提供的映射关系,将源代码

Visual Studio调试之断点技巧篇

原文链接地址:http://blog.csdn.net/Donjuan/article/details/4618717 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我讲了如何设置函数断点,说实话,我个人喜欢设置函数断点,而不是在代码行里面设置断点.一般来说,函数断点在下面几种情形下有用: 1. 例如调试一个网站程序,你通过分析网站的日志发现最有可能发生错误的函数,打开调试器并将调试器附加到程序上去,设置函数断点,重新执行网站--这样做的好处是,不用到处打开源文件