Visual Studio 2017开发linux程序使用实例及原理简析
2017-10-27 12:48
981 查看
1.下载安装vs开发linux程序的工具包
2.创建一个工程,选择跨平台里面的linux平台
3.写一段测试代码,这里就可以包含linux的系统头文件编译,不过vs下还是现实红的
然后选中调试,就弹出一个输入远程主机的信息,这里就和xshell使用ssh协议连接信息一样的输入:
4.编译调试,有个调试窗口要调出来,然后就可以看见linux控制台的输出信息了
编译输出控制台
5.登陆远程主机,可以看见启动的程序和源代码了
6.简要的分析一下原理
从vs编译的输出控制台我们可以看出编译是使用mingw32交叉编译,然后使用ssh协议将源代码拷贝到目标主机,看见gdbserver进程了,应该是vs使用ssh协议作为client与远程主机的gdbserver调试
一些配置信息也说明了这一点:
2.创建一个工程,选择跨平台里面的linux平台
3.写一段测试代码,这里就可以包含linux的系统头文件编译,不过vs下还是现实红的
#include <cstdio> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <iconv.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/file.h> #include <unistd.h> #include <sys/mman.h> #include <fcntl.h> #include <string> #include <iostream> #include <istream> #include <iosfwd> #include <sstream> #include <fstream> using namespace std; int fd_ = 0; int size_ = 0; char *buff_ = nullptr; void open_file(std::string file_name) { fd_ = open(file_name.c_str(), O_RDONLY); if (fd_ == -1) { size_ = 0; } else { struct stat st; int r = fstat(fd_, &st); if (r == -1) { size_ = 0; close(fd_); } else { size_ = st.st_size; } } } void unmap_file() { if (fd_ != -1) { close(fd_); munmap(buff_, size_); } } //if data is too big,create file spilt more file_index,mmap more times(hfrz ptr as start addr) int mmap_file(int fd, char *buff) { if (fd == -1) { return -1; } buff = (char *)mmap(NULL, size_, PROT_READ, MAP_PRIVATE, fd_, 0); if (buff == (void*)-1) { std::ostringstream oslog; oslog << "mmap failed:" << strerror(errno); cout << oslog.str() << endl; close(fd); return -1; } return 0; } int main() { char *buff = (char *)malloc(1024); const char *str = "hello world"; memcpy(buff, str, strlen(str)+1); printf("hello from ConsoleApplication1!\n"); mmap_file(23, buff); getchar(); return 0; }
然后选中调试,就弹出一个输入远程主机的信息,这里就和xshell使用ssh协议连接信息一样的输入:
4.编译调试,有个调试窗口要调出来,然后就可以看见linux控制台的输出信息了
编译输出控制台
5.登陆远程主机,可以看见启动的程序和源代码了
6.简要的分析一下原理
从vs编译的输出控制台我们可以看出编译是使用mingw32交叉编译,然后使用ssh协议将源代码拷贝到目标主机,看见gdbserver进程了,应该是vs使用ssh协议作为client与远程主机的gdbserver调试
一些配置信息也说明了这一点:
相关文章推荐
- Visual Studio 2017开发linux程序之libevent使用实例
- 使用Visual Studio 2017开发Linux程序
- 使用Visual Studio 2017作为Linux C++开发工具
- 使用Visual Studio 2017作为Linux C++开发工具
- 使用Visual Studio 2017作为Linux C++开发工具
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 使用Visual Studio 2017作为Linux C++开发工具
- WinGDB 使用Visual Studio远程开发Linux程序
- 使用Visual Studio 2017作为Linux C++开发工具
- 使用Visual Studio 2017作为Linux C++开发工具
- 使用Visual Studio 2017作为Linux C++开发工具
- 使用Visual Studio 2017作为Linux C++开发工具
- 使用Visual Studio 2017作为Linux C++开发工具
- 在Linux使用Eclipse+CDT开发C/C++程序
- 如何在Linux使用Eclipse + CDT开发C/C++程序?
- 在Linux使用Eclipse + CDT开发C/C++程序
- 使用autotools辅助linux程序开发
- 使用DDD+GDB开发ARM Linux程序
- 使用Visual Studio 2008 开发php程序
- 使用ADO封装类的数据库程序开发实例(上)