目录

1.创建项目

2.import  a project

3.创建远程连接

4.选择远程目录

 5.选择本地和远程文件同步的方式

6.选择可执行程序名字

7.增加源文件

8.编写makefile

9.选择release和VisualGDB

10.编译程序

11.增加可执行程序的名字

12.运行程序

13.调试


这是用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就可以进行调试。 

Logo

更多推荐