前言

Source Insight是一个面向项目开发的程序编辑器和代码浏览器,它拥有内置的对C/C++, C#和Java等程序的分析。能分析源代码并在工作的同时动态维护它自己的符号数据库,并自动显示有用的上下文信息。越是大规模的代码,越能显示出SI的强大之处。Linux服务器开发领域,很多时候代码往往是从Linux主机上copy一份到Windows,然后SI为其创建项目。代码在Windows上修改好后,用WinSCP上传到Linux主机替换源代码,或着使用Beyond Compare对比合并代码再上传,总之操作起来很麻烦。除此之外,也是用SI的最大遗憾,就是这玩意不支持编译调试功能。Visual Studio 2017开始引入了cross platform feature,可以远程GDB调试,但是目前很多地方还不是很完善,SI还是大多数人的选择。既然SI的强项是看代码,那么本为将介绍如何让你更爽的看Linux项目代码。

背景

目前共享单车如火如荼,本人也开发了一套共享单车后台系统,主要语言是C/C++。这套系统运行在WMware Workstation 15上Ubuntu 16.04虚拟机中。

Win 与 Lnx共享一套代码

为了Windows本地SI编辑代码,与Linux主机端调试代码无缝对接,我寻找了若干跨平台代文件共享方案。

首先WMware Workstation Tools自身提供服务用于解决Host与VM之间文件共享、DNS、NAT、DHCP等问题。这些服务当VM是Windows时工作良好,但是当VM是Linux是,WMware Workstation Tools提供的文件共享服务几乎就是不能用。而且更有意思的是,你在Linux平台下安装WMware Workstation Tools,会弹出提示,提示你换别的软件使用。官方都不建议使用,我们还是别试了。

WMware Workstation Tools说白了只是WMware提供的一种服务,脱离了虚拟机环境并不具有问题通用性,于是我选择了使用samba服务。我的Linux虚拟机运行的是Uubntu 16.04。参考这个视频叫你如何设置Samba,进而实现Linux与Windows无缝对接。我将自己的项目以及常用头文件映射到了WIndows本地,如下图:

SI针对Z盘建立项目,然后编辑修改代码,保存后Linux端可以直接编译调试。但是对于一些include /usr/local/include下的代码,SI却无法解析。没办法,那个文件没在SI项目中的原因啊。

Win 查看 Lnx 上代码

在上一节中,其实已经部分解决了查看代码的问题。但是,部分位于/usr/local/include 或者 /usr/include 下的代码是无法成功解析并查看的。如下图

TNonblockingServer.h文件位于/usr/local/include/thrift/server/ 目录下,我自然是没办法解析他的。于是我有针对/usr/local/include做了映射,并将其作为External Symbols导入到当前SI项目,这样就完美解决了查看非SI项目中代码的问题。具体步骤如下:

Project→Import External Symbols for Current Project...→Add→Import from a source code tree,然后再Project→Synchronize File..…

能否在Project Files中搜索SI项目外的文件

如果你按照上面的步骤走到这里,答案是不能。这是SI划定项目文件范围的规则决定的。Project→Add and Remove Project Files..…

这一个地方就限制死了你可选文件的范围。能导入外部符号已经很良心了,这个是真没办法实现了。

当然要想做其实也有办法,就是把项目文件、/usr/local/include都放在一个项目文件夹中,然后针对这个文件夹建立SI项目,但是这样做有破坏了原有代码结构。看个人取舍吧

最新文章

  1. LogStash filter介绍(九)
  2. HTTP的客户端识别与cookie机制
  3. jQuery 判断是否包含某个属性
  4. SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元
  5. How to return dictionary keys as a list in Python 3.3
  6. UOJ 08 Quine 是在下输了
  7. 正则表达式中/i,/g,/m的作用
  8. HDU 4810 这道题 是属于什么类型?
  9. ARM异常---一个DataAbort的触发过程:
  10. tkinter第一章
  11. geyear和getfullyear的区别
  12. 自建MySQL5.6数据库查询优化
  13. Linux系统编程-----进程fork()
  14. Eclipse环境搭建并且运行wordcount程序
  15. js+css3+HTML5拖动滑块(type="range")改变值
  16. tomcat 7.0 最大连接数和线程设置
  17. QT5 解决QSqlDatabase: QMYSQL driver not loaded 问题
  18. python中RabbitMQ的使用(路由键模糊匹配)
  19. LPCScrypt, DFUSec : USB FLASH download, programming, and security tool, LPC-Link 2 Configuration tool, Firmware Programming
  20. 【[NOI2010]超级钢琴】

热门文章

  1. mysql中字符串的隐藏字符处理
  2. 内存自动清理.sql
  3. SpringCloud基础
  4. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案使用过程中问题的自我排查-设备不在线问题自我排查检测
  5. SpringBoot示例教程(一)MySQL与Mybatis基础用法
  6. [数据结构 - 第3章] 线性表之单链表(C++实现)
  7. (转)Intellij Idea工具栏添加打开选中文件的资源管理器位置
  8. [转帖]CNN、RNN、DNN的一般解释
  9. PHP中YUM的理解
  10. lsb_release -a linux查看版本未找到命令