目录

1、Source Insight介绍

2、创建Source Insight工程,将reactos项目文件添加到工程中

3、使用Source Insight查看代码

3.1、查看reactos中的某个接口的内部实现

3.2、通过regsvr32程序对应的.c源文件查看regsvr32程序的内部实现

4、最后


有时我们需要去查看一些大型项目的开源代码,但这些开源项目不支持使用我们日常用的IDE开发工具去打开,此时该选择哪个工具去查看源码呢?Source Insight工具绝对是一个不错的选择,本文我们就来介绍如何使用Source Insight工具去查看并编辑源码。

1、Source Insight介绍

Source Insight是最简洁、最强大的轻量级代码浏览编辑器之一,启动快、使用便捷,很多程序员应该都使用过!它几乎支持所有的语言,比如C、C++、ASM汇编、HTML等,能创建并维护其高性能的符号数据库,包括函数、变量、结构体、类等符号,特别对于阅读大型工程项目的代码十分方便。不过Source Insight仅仅是个代码浏览编辑器,没有包含编译器,所以没有编译代码的能力。
       本文以查看reactos开源操作系统源码为例,介绍如何使用Source Insight编辑器。

2、创建Source Insight工程,将reactos项目文件添加到工程中

在菜单栏点击Project->New Project发起工程的创建。在弹出的窗口中输入工程名reactos-2,如下所示:

点击OK,进入工程的配置页面。在配置页面中,设置reactos源码的目录,并且勾选“store function-local symbols in database”选项,如下所示:

勾选该选项后,Source Insight会自动将自动将函数、变量等符号保存到数据库中,下次打开工程时还可以继续使用。
       点击OK后进入“Add and Remove Project Files”页面:

该页面中默认会选中上一步选择的源码目录,点击右侧的“Add Tree”按钮,将项目目录下的所有文件都添加到reactos-2工程中。

如果项目目录中的文件比较多,将会显示添加文件的进度条:

Source Insight正是通过这些添加进来的文件中的符号信息构建出符号数据库,以方便代码的查阅的。点击Close按钮即完成工程的创建。

Source Insight每次启动时都会默认打开上一次打开的工程,如果创建了多个工程,想查看另一个工程,可以点击Project->Close Project将当前打开的工程关闭掉,然后再点击Project->Open Project,打开要查看的另一个工程。

3、使用Source Insight查看代码

在查看代码之前,可以先点击右侧的“Project Symbol List”按钮:

将工程中所有文件中的函数符号显示到列表中,以方便在列表中搜索查看。如果项目目录下的文件比较多,这个处理起来也会比较慢,也会显示一个进度条:

等待其搜索完即可。

3.1、查看reactos中的某个接口的内部实现

假设我们现在要看一下SetUnhandledExceptionFilter函数的内部实现,可以点击工具栏中如下的按钮:

在弹出窗口中输入SetUnhandledExceptionFilter,然后点击Search按钮进行搜索,搜索到如下的结果:

在搜索结果中随便找一个条目,点击左侧的那个切换按钮,就跳转到对应的文件及代码的行号上:

在源代码中点击左边的切换按钮,可以切回到搜索列表中。

然后将左键点击SetUnhandledExceptionFilter函数处,下方的视图中会自动跳转到SetUnhandledExceptionFilter函数内部的实现代码:


双击该显示SetUnhandledExceptionFilter内部实现的视图,即可跳转到SetUnhandledExceptionFilter函数内部实现处:

所以通过上述方法,我们可以去查看系统库中任意一个接口的内部实现,而reactos中的实现,和Windows NT内核的实现是很相似的,所以通过查看reactos中的代码,可以大概地看出Windows系统的一些内部实现。

3.2、通过regsvr32程序对应的.c源文件查看regsvr32程序的内部实现

之前我们在安装包中注册控件时遇到加载dll控件库失败的问题,手动使用regsvr32可以在windows的cmd窗口是可以手动加载注册成功的,所以想看一下regsvr32程序中是如何加载dll控件库,以及如何向系统注册控件的。

regsvr32程序是一个独立的exe,他有独立的main函数,有对应的.c源文件,于是点击右侧的“Project File List”按钮:

切换到文件列表页面,然后在上方的搜索框中尝试这输入regsvr32关键字,结果还真找到了regsvr32.c源文件:

双击进入到regsvr32.c源文件中,找到了regsvr32程序的main函数_tWinMain,继续向下查看_tWinMain函数的内部实现,看到了两个关键点:

一个是调用LoadLibraryEx函数去加载dll库的,传入了LOAD_WITH_ALTERED_SEARCH_PATH参数;二是通过获取库中的DllRegisterServer接口去向系统注册控件的。
       所以后来我们将加载库的代码由LoadLibrary换成LoadLibraryEx(并传入LOAD_WITH_ALTERED_SEARCH_PATH参数)就解决我们的问题了。

4、最后

本文只是简单的介绍了如何创建工程,以及创建工程过程中要注意的若干细节。文章还介绍了如何去查看代码,并给出查看代码的两个实际范例。本文只是介绍了一些主要的点,仅供参考,更多的细节还需要读者自己去使用去发现。

使用Source Insight查看编辑源代码相关推荐

  1. source insight 里编辑的时候,每次粘贴后,光标停留在粘贴内容的左面

    在source insight 里编辑的时候,每次粘贴后,光标停留在粘贴内容的左面. 我想把它设定为 粘贴后,光标移动倒粘贴内容的右面. 该怎么做? 这是个设置问题,按照下面的步骤设定就可以了. Op ...

  2. KEIL和source insight混合编辑时,文本对齐的方式

    由于部分程序是前任留下的,在使用keil和source insight混合编辑的时候,常常出现在source insight中编辑后在keil中显示的不对齐.经摸索结合网上资料已解决,特此记录,以备遗 ...

  3. Source Insight 查看函数调用关系

    研究海思SAMPLE时,使用Source Insight查看源码,函数调用关系查看: 选中一个函数,右键选择"Show in Relation Window" 显示界面的相关设置: ...

  4. 打开查看linux内核代码,source insight 查看linux内核代码树【转载】

    [工程建立好之后,在工程选项下点击"同步",默认选项,同步文件后,既可以进行各种跳转查看了] Source Insight实质上是一个支持多种开发语言(java,c ,c 等等)的 ...

  5. 【Android】安装Android Studio、破解Source Insight+查看Android Framework源码

    文章目录 安装Android Studio 查看Framework源码 1.Source Insight安装 2.Framework源码下载 3.加载源码 安装Android Studio 官网地址: ...

  6. Source Insight 基本使用(1)-使用Source Insight查看Android Framework 源码

    一.下载framework源码: google已经把framework源码托管在了gitHub上:  https://github.com/android/platform_frameworks_ba ...

  7. Source Insight 查看函数调用关系使用技巧

    用处 要想了解大型工程的运行原理和过程,分析其函数调用关系是一个很有用的方法.比起自己一个个搜索.记录,使用工具效率会更高.Source Insight 就有一个显示函数调用关系的功能,非常好用. P ...

  8. 通过Source insight查看内核源码

    1.下载源码 https://www.kernel.org/pub/linux/kernel/ 下载后解压即可 2.打开SourceInsight,创建工程 点击顶部Project菜单 3.将源码文件 ...

  9. source insight python Python.CLF 语言包,设置source insight使之可以查看并编辑python文件

    习惯了source insight,找到了一个教程可以使source insight查看python语言,照着设置一下. 1.需要下载一个插件,下面地址下载压缩包,解压即可 python插件下载地址 ...

  10. 在服务器 和 虚拟机中 查看代码 samba source insight

    在服务器 或者 虚拟机中, 我们查看代码是不方便的,可以使用samba 和 source insight 分别来 同步代码 和 编辑代码 samba 安装 1.1 apt-get 安装 A.安装sam ...

最新文章

  1. 逻辑回归及常用模型分类评估方法
  2. 【NLP】Attention Model(注意力模型)学习总结
  3. python堆栈与队列_python:用deque实现栈,队列和保存最后的N个元素
  4. string转成对象_详解Java I/O流(五),对象序列化
  5. Delphi多媒体设计之TMediaPlayer组件(二)
  6. 使用libcurl以Post方式向HTTP服务器提交数据
  7. Eclipse之Project facet Java version 1.8 is not supported.
  8. Java基础:如何读取控制台输入?如何读取字符?
  9. 新版傻妞对接QQ完整版(10月24日)
  10. linux 更新包缓存目录,清除ubuntu下缓存、软件安装包和多余内核
  11. 抖音上显示内部服务器错误,抖音被限流了怎么办?这里分析了原因和解决方法...
  12. 隐私计算在普惠金融领域的应用研究
  13. 李某人的第一篇blog
  14. 离散型随机变量及其分布列
  15. PowerBi - TopN+帕累托
  16. 计算机专业电脑i5与i7的区别,处理器i5和i7有什么区别 处理器i5和i7的区别介绍【图文】...
  17. 不要写死!天猫App的动态化配置中心实践
  18. 解决Unity旋转改变局部坐标问题
  19. Jenkins+ansible+Tomcat实现项目远程自动部署
  20. IPRAN学习中———整体网络部署设计思路

热门文章

  1. 记一次给笔记本安装固态硬盘
  2. 案例效果:实现移动端端轮播图效果
  3. [SSL_CHX][2021-8-18]角谷猜想
  4. 基于struts2 拦截器ResultType为chain的Action之间数据传递 ——表单页面打开优化
  5. 独立双(N)拥塞窗口的TCP单边加速思想
  6. [Android Security] 静态分析Android程序——smali文件解析
  7. 开学季将至 华硕重炮手主板让你学习娱乐两不误
  8. Python模块查询
  9. python爬取英雄联盟所有皮肤价格表_用python网络爬虫爬取英雄联盟英雄图片
  10. macOS 中英文输入法切换终极解决方案