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
我可以在 Windows XP 上使用 Visual Studio 2010 远程调试器从 Visual Studio 2012 调试 .Net 4.0 应用程序吗?