使用visual studio 远程编辑和调试linux代码
1.创建项目文件--新建--项目,然后选择linux项目,然后点击确定。2.import a project这里选择import a project。3.创建远程连接这里选择Create a new SSH connection.4.选择远程目录选择远程目录的意思就是,你想把这个工程放在服务器的那个目录下,后面你本地的代码修改后,在执行make编译的时候会同步到远程的该目录下。4.选择可执行程序名
目录
这是用visual studio远程编辑和调试linux代码的教程,使用visual studio code远程编辑和调试linux代码的教程见:ubuntu上安装vscode,并远程开发与远程调试服务器代码。
1.创建项目
文件--新建--项目,然后选择linux项目,然后点击确定。
2.import a project
这里选择import a project。
3.创建远程连接
这里选择Create a new SSH connection.
4.选择远程目录
选择远程目录的意思就是,你想把这个工程放在服务器的那个目录下,
5.选择本地和远程文件同步的方式
这种方式相当于创建工程时,把服务器上的整个工程下载到本地,后面服务器修改的代码是不会被同步到本地的,而本地修改的代码,当你每次点击生成的时候,本地的代码会自动的更新到服务器,覆盖掉服务器的代码。
这种方式有一个问题,就是你修改服务器代码没用,等你下次用vs生成的时候,本地的代码自动就覆盖掉了服务器代码,所以之前遇到一个问题,在服务器用命令行编译可以生成debug版本,但是用vs生成就是生成不了debug版本,这就是因为你本地的build文件夹里面的makefile是release版本的,所以你服务器修改成debug也没用,每次在vs里面点击生成的时候,本地的makefile就覆盖掉了服务器的makefile。
注意箭头的位置,这里的意思是排除.o文件,也就是创建工程时服务器的.o文件不会被下载到本地。
6.选择可执行程序名字
如果你是第一次创建工程,还不知道可执行程序的名字,这里选择i do not know,如果你是打开一个之前已经有的工程,那么你肯定知道可执行程序的名字了,这里就要把可执行程序的名字写上。
如果你的工程是用cmake构建的,那么可以先在命令行使用cmake生成makefile,然后再用vs构建,然后这里的build directory就选择为cmake的build文件夹。同样如果想编译成debug版本,也是先修改Cmaketext,然后cmake,然后再用vs构建。
点击finish之后出现如下提示,不用管,直接忽略。
7.增加源文件
增加源文件,然后编写代码。
#include<iostream>
using namespace std;
int main(void)
{
cout << "this is a C++ program" << endl;
int a = 0;
int b = 0;
int c = a + b;
return 1;
}
8.编写makefile
这个makefile是从别的地方拷贝过来的,这里仅作为示例。
CC = gcc
CPP = g++
AR = ar
RM = rm -f
#Define the resource compiler.
RC = windres
## debug flag
DBG_ENABLE := 1
OS = $(shell uname)
## source file path
SRC_PATH := ./
SRC_PATH_EXT :=
## target file name
TARGET := dt_demo
BINPATH = ../bin
## get all source files
SRCS := $(foreach spath, $(SRC_PATH), $(wildcard $(spath)*.c) ) $(foreach spath, $(SRC_PATH), $(wildcard $(spath)*.cpp) )
## all .o based on all .c/.cpp
OBJS = $(SRCS:.c=.o)
OBJS := $(OBJS:.cpp=.o)
## macro define
DEFS := __LINUX__ OS_LINUX _FILE_OFFSET_BITS=64
## need libs, add at here
LIBS :=
#opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_video opencv_videoio nvinfer cudart nvonnxparser nvinfer_plugin nvparsers mytrt
## used headers file path
INCLUDE_PATH := ../src /usr/local/cuda/include /usr/include/opencv4 /usr/include/aarch64-linux-gnu
#$(warning $(INCLUDE_PATH))
## used include librarys file path
LIBRARY_PATH :=/usr/local/cuda/lib64 /usr/lib/aarch64-linux-gnu/tegra /usr/lib/aarch64-linux-gnu ../
## debug for debug info, when use gdb to debug
ifeq (1, ${DBG_ENABLE})
CFLAGS += -D_DEBUG -g -DDEBUG=1
else
CFLAGS += -O0 -DNDEBUG
endif
#for ENCYPT flags
ifeq ($(OS), Linux)
LIBS += dl
CFLAGS += -fPIC
TARGET_EXT :=
LIBRARY_PATH +=
LDFLAGS += -Wl,--rpath=../
endif
CFLAGS += -pipe $(foreach m, $(DEFS), -D$(m))
## get all include path
CFLAGS += $(foreach dir, $(INCLUDE_PATH), -I$(dir)) -g -rdynamic
CXXFLAGS += $(CFLAGS) -std=c++11
## get all library path
LDFLAGS += -lpthread $(foreach lib, $(LIBRARY_PATH), -L$(lib))
## get all librarys
#LDFLAGS += $(foreach lib, $(LIBS), -l$(lib))
RCFLAGS ?= -DNDEBUG
default: all
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.cpp
$(CPP) $(CXXFLAGS) -c $< -o $@
all: $(OBJS) $(RESOURCE)
$(CPP) $(CXXFLAGS) -o $(TARGET)$(TARGET_EXT) $(OBJS) $(RESOURCE) $(LDFLAGS)
clean:
$(RM) $(OBJS) $(RESOURCE)
9.选择release和VisualGDB
10.编译程序
直接点击生成解决方案,就会执行make命令进行编译。注意执行make命令之后,本地修改的代码会被同步到服务器,代码同步就是在这里进行的,
如果用另一种samba共享的方式,make的时候就不会存在本地代码同步到服务器的问题,因为这种方式本地和服务器代码相当于是同步共享的,修改的就是同一个文件。
11.增加可执行程序的名字
前面我们创建项目的时候还没有可执行程,所以那里空着,现在我们编译完了,生成了可执行程序,所以这里我们把可执行程序加上,注意添加可执行程序的时候要点击右边的文件夹图标选上,不能自己输入名字。
build setting这里增加可执行程序的名字,
12.运行程序
13.调试
首先在代码中打一个断点。
然后直接F5就可以进行调试。
更多推荐
所有评论(0)