当前位置: 首页 > news >正文

SourceInsight - Relation Windows

磨刀不误砍柴工,你使用的工具决定了你的下限。我平时使用较多的代码编辑工具就是SourceInsight,这个工具速度快,操作方便,但处理非常大的项目的性能不是很理想,比如你要是添加整个Linux Kernel的源代码的话。

在使用SI浏览C语言项目代码时,用的最多的就是查找这个变量或函数在那里调用,通过查找来理解这个变量或函数的意义或作用是什么,是怎么使用的,理解其涉及的操作的执行逻辑等等。如果是C++语言的项目代码,除了上面,还要查找类的继承关系和谁使用了这个类,一般我都是通过查找类名,然后通过在搜索结果里查找public字符串来寻找它的继承类,通过查找new字符串来寻找谁生成实例而使用了它。

之前还专门搜索过从C++代码来导出类的继承和调用关系的工具。市场上是有这类工具的。

日常使用都还OK,也就这么用下来,并没有花很多时间研究SI这个工具,用的多是普通功能。里面有个Relation功能,之前理解过,能通过图表形式,显示函数或类的关系。当时知道有这个功能,也就没在意。今天想起来,再要查找某个基类的派生类时,突然想到,用这个功能不是正好可以解决这个问题吗,于是设置并使用了一下,真香!

下面参考帮助文档,来理解学习一下吧。

========== 分割线 ========== 

关系窗口(Relation Window)是 Source Insight 的一项创新功能,可以显示当前选中的符号与其他事物之间的关系。关系窗口可以显示函数调用树、类层次结构、结构成员、引用树等。它可以停靠在源代码窗口旁边,并在后台工作,自动跟踪您正在选择的内容并显示关系信息。

The Relation Window is a Source Insight innovation that shows the relationship between the currently selected symbol and other things. The Relation Window can show function call trees, class hierarchies, struc­ture members, reference trees, and more. It can be docked along side your source windows, and it works in the background tracking what you are selecting and showing relationship information automatically.

要显示关系窗口,请选择视图 > 面板 > 关系窗口。

To show the Relation Window, select View > Panels > Relation Window.

您可以在关系窗口选项对话框中指定关系类型和许多其他选项。请参阅: 关系窗口选项。

You can specify the relationship types and many other options in the Relation Window Options dialog. See: Relation Window Options.

关系窗口在后台运行,并跟踪您所选择的符号。关系窗口的优点在于您无需做任何特殊操作。在您工作时,它在后台运行,但您可以在需要时与它互动。您还可以打开多个关系窗口,分别显示不同类型的信息。

The Relation Window runs in the background and tracks what symbols you have selected. The beauty of the Relation Window is that you don’t have to do anything special. It works in the background while you work, but you can interact with it when you want to. You can also have several Relation Windows open, each show­ing different types of information.

1, Outline and Graph Views (大纲和图表视图)

关系窗口有两种视图: 大纲视图和图形视图。图形视图将符号显示为图形节点,并用线条将它们连接起来。关系图选项命令(关系窗口右键菜单中提供)可让您控制图形视图的外观。

The Relation Window has two types of views: Outline view and Graph view. The Graph view shows symbols as graph nodes with lines connecting them. The Relation Graph Options command (available on the Relation Window right-click menu) gives you control over the appearance of the graph view.

Outline View (大纲视图)

关系窗口大纲视图是关系层次结构的紧凑文本视图。您可以单击以展开或折叠大纲中的层级。

The Relation Window outline view is a compact, textual view of the relation hierarchy. You can click to expand and collapse levels in the outline.

Graph View(图形视图)

关系窗口图形视图是与大纲视图相同的关系的可视化表示。您可以展开和折叠图形中的节点。可以选择水平图形布局或垂直图形布局。您还可以打印图表,或将图表图像复制到系统剪贴板,以便在其他图像程序中进行处理。

The Relation Window graph view is a visual representation of the same relationship as the outline view. You can expand and collapse nodes in the graph. You can select either a horizontal graph layout, or a vertical graph layout. You can also print the graph, or copy the graph images to the system clipboard so you can pro­cess it in another imaging program.

要展开或折叠节点,请先将鼠标光标悬停在水平图形中节点的右边缘或左边缘上(或垂直图形中节点的顶部或底部中间)。鼠标光标将包含一个 + 或 - 符号。单击即可展开或折叠。

To expand or collapse a node, hover the mouse cursor first over the right or left edge of the node in a horizon­tal graph (or the top or bottom middle of a node in a vertical graph). The mouse cursor will contain a + or - symbol. Click to expand or collapse.

右键单击 "关系窗口",选择 "关系窗口图形选项",即可选择图形视图选项。请参阅: 关系窗口图形选项。

Relation Window Right-Click Menu

2, Relationship Rules (关系规则)

选择符号时显示的关系视图取决于符号的类型。您可以在 "关系窗口选项 "中对此进行控制。例如,您可以指定如果在源代码中选择一个函数,关系窗口将显示对该函数的引用。而如果选择一个类名,关系窗口将显示从该类派生出来的类。

The relation view that appears when you select a symbol depends on the type of symbol. You have control over this in the Relation Window Options. For example, you can specify that if you select a function in your source code, the Relation Window will show references to that function. And, if you select a class name, the Relation Window will show the classes derived from it.

每次 "关系窗口"展开一个符号以显示新的层级时,展开所代表的关系都是基于被展开的符号类型。这意味着每个关系窗口都有可能显示多种关系。 请参阅: 关系窗口选项。

Each time the Relation Window expands a symbol to show a new level, the relationship represented by the expansion is based on the type of symbol being expanded. That means each Relation Window can potentially show multiple relationships.  See: Relation Window Options.

Relationship Types (关系类型)

这些关系可分为以下几大类,从计算速度最快到最慢依次排列:

* 包含 - 显示当前符号的内容。例如,结构体的成员。

* 调用 - 显示当前符号引用了哪些其他符号。例如,当前函数调用的函数。

* 调用和调用者 - 显示分割图;一边是当前函数调用的函数,另一边是调用当前函数的函数。

* 引用 - 显示哪些其他符号引用了当前符号。例如,调用当前函数的函数。

The relationships fall into these general categories, listed from computationally the fastest to slowest:

* Contains – show the contents of the current symbol. For example, the members of a struct.

* Calls – show what other symbols are referred to by the current symbol. For example, functions that are called by the current function.

* Calls and Callers - show a split graph; one side are the functions called by the current function, the other side is the functions that call the current function.

* References – show what other symbols refer to the current symbol. For example, functions that call the current function.

3, Call Graphs (调用图)

可以对函数调用图关系进行过滤,以便只显示您认为最有趣的路径。关系窗口属性对话框中的 "调用图过滤 "按钮将带您进入一个对话框,您可以通过指定要排除的特定函数来控制过滤。您还可以通过代码度量限制过滤函数。

The function call graph relationships can be filtered to show only what you consider the most interesting paths. The “Call Graph Filtering” button in the Relation Window Properties dialog box takes you to a dialog box that lets you control the filtering by specifying particular functions you want to exclude. You can also fil­ter functions out by code metrics constraints.

请注意,Source Insight 将 C/C++ 宏视为合法的类似函数的符号,因此 C/C++ 宏可能会显示在调用图中。如果需要,可以在调用图过滤对话框中将其过滤掉。

Note that Source Insight considers C/C++ macros legitimate function-like symbols, and so C/C++ macros may show up in a call graph. You can filter them out in the Call Graph Filtering dialog box if you want.

Relation Window Performance (关系窗口性能)

关系窗口需要进行一些处理。某些关系的计算速度较慢。对于大型项目,"引用 "关系的计算速度最慢。

The Relation Window requires some processing. Some relationships are slower to compute. For very large projects, the “References” relationship will be the slowest to compute.

4, Multiple Relation Windows (多个关系窗口 )

您可以拥有多个关系窗口实例,这样就可以同时显示多个关系。每个关系窗口都有自己的关系选项。例如,一个窗口可以显示所选函数调用了哪些函数,另一个窗口可以显示哪些函数调用了所选函数。要创建新的关系窗口,请右键单击关系窗口并选择新建关系窗口。

You can have multiple Relation Window instances, so you can show multiple relationships at the same time. Each Relation Window has its own relationship options. For example, one window could show you what func­tions are called by the selected function, and another window could show you what functions make calls to the selected function. To create a new Relation Window, right-click on the Relation Window and select New Relation Window.

5, Customizing the Relation Window (自定义关系窗口)

关系窗口选项命令可从关系窗口工具栏或快捷菜单访问。您可以通过该命令控制显示哪些关系,以及窗口的显示方式。请参阅: 关系窗口选项。

The Relation Window Options command is accessed from the Relation Window toolbar or shortcut menu. You control what relationships are shown from this command, and how the window displayed. See: Relation Window Options.

您还可以使用关系图选项命令自定义关系窗口图表视图的外观。请参阅:关系窗口图形选项。

You can also customize the appearance of the Graph View of the Relation Window by using the Relation Graph Options command. See: Relation Window Graph Options.

6, Relation Window Graph Options(关系窗口图形选项)

具体使用可以参照帮助文档或者尝试一下。

7, Relation Window Options (关系窗口选项)

具体使用可以参照帮助文档或者尝试一下。

参考:

1,SourceInsight帮助

Features and Concepts -> Relation Window.

相关文章:

SourceInsight - Relation Windows

磨刀不误砍柴工,你使用的工具决定了你的下限。我平时使用较多的代码编辑工具就是SourceInsight,这个工具速度快,操作方便,但处理非常大的项目的性能不是很理想,比如你要是添加整个Linux Kernel的源代码的话。 在使用SI…...

二维数组处理

输入整型二维数组a(5行5列),完成如下要求: 输出二维数组a。 将a的第2行和第4行元素对调后,形成新的二维数组a并按行输出,每个元素之间隔一个空格。(行号从0开始计算)。 用对角线(指二维数组左…...

线性表——(2)线性表的顺序存储及其运算的实现

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 看到美好,感受美好&a…...

数据结构 -- 图论之最小生成树

目录 1.最小生成树算法 1.Kruskal算法 2.Prim算法 1.最小生成树算法 定义:最小生成树算法:连通图有n个顶点组成,那么此时的图的每一个点都能相互连接并且边的个数为n-1条,那么此时该图就是最小生成树. 下面量算法有几个共同的特点: 1.只能使用图中权值最小的边来构造生成树 …...

【已解决】游戏缺少xinput1_3.dll的详细解决方案与详情解析

在现代科技日新月异的时代,电脑已经成为我们生活和工作中不可或缺的工具。然而,由于各种原因,电脑可能会出现一些问题,其中之一就是xinput1_3.dll文件的缺失。本文将详细介绍xinput1_3.dll丢失对电脑的影响以及丢失的原因&#xf…...

华天动力-OA8000 MyHttpServlet 文件上传漏洞复现

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合,为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA MyHttpServlet 存在任意文件上传漏洞,未经身份认证的攻击者可上传恶意的raq文件…...

小航助学题库蓝桥杯题库c++选拔赛(23年8月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号) 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)...

[Ubuntu 18.04] RK3399搭建NFS服务实现共享目录

NFS(Network File System)是一种分布式文件系统协议,允许远程计算机通过网络访问存储在另一台计算机上的文件。它使得多台计算机可以共享文件,并且可以在不同计算机之间实现文件的透明访问和共享。 以下是 NFS 服务器的一些特点和介绍: 文件共享:NFS 服务器允许将存储在…...

Java---抽象类讲解

文章目录 1. 抽象类概述2. 抽象类特点3. 抽象类的成员特点4. 抽象类猫狗应用 1. 抽象类概述 在Java中,一个没有方法体的方法应该定义为抽象方法;而类中如果有抽象方法,该类必须定义为抽象类。 2. 抽象类特点 1. 抽象类和抽象方法必须使用abst…...

CNAS认可是什么?CNAS软件测试报告如何获取?

一、CNAS认可是什么?   CNAS认可是指中国合格评定国家认可委员会的认可程序。CNAS是中国最高级别的认可机构,负责审核和认可符合国家标准的实验室、检测机构和认证机构。通过CNAS认可,机构可以获得国际公认的认可证书,证明其测试结果和认证…...

Tomcat 修改版本号

lib 目录下增加文件 /lib/org/apache/catalina/util/ServerInfo.properties ServerInfo.properties文件里面只需要输入server.info显示的版本号 其他可配置信息 server.infonginx server.number22.0 server.builtMay 11 2023 08:22:10 UTC 显示效果...

Python算法——霍夫曼编码树

Python中的霍夫曼编码树 霍夫曼编码是一种用于数据压缩的技术,通过构建霍夫曼编码树(Huffman Tree)来实现。这篇博客将详细讲解霍夫曼编码树的原理、构建方法和使用方式,并提供相应的Python代码实现。 霍夫曼编码原理 霍夫曼编…...

hql面试题之上海某资深数仓开发工程师面试题-求不连续月份的月平均值

1.题目 A,B两组产品的月平均值,月平均值是当月的前三个月值的一个平均值,注意月份是不连续的,如果当月的前面的月份不存在,则为0。如A组2023-04的月平均值为2023年1月的数据加2023-02月的数据的平均值,因为没有其他月…...

VT驱动开发

VT技术(编写一个VT框架) 1.VT技术介绍 1.技术介绍 1.VT技术 VT技术是Intel提供的虚拟化技术,全称为Intel Virtualization Technology。它是一套硬件和软件的解决方案,旨在增强虚拟化环境的性能、可靠性和安全性。VT技术允许在一台物理计算机上同时运…...

火柴人版王者-Java

主类 package com.sxt; import com.sxt.beast.Beast; import java.awt.Component; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter…...

docker 中的–mount 和-v 参数有啥区别

docker 中的–mount 和-v 参数有啥区别 --mount 和 -v 是 Docker 中用于挂载卷(Volumes)的两种不同的方式。 --mount 参数: 这是一种更为灵活和强大的挂载方式,允许你指定多个选项。 使用 --mount 参数,你可以指定挂…...

设计规则:模块化的力量

这是一本比较冷门的书**《设计规则:模块化的力量》**,虽然豆瓣上只有58个评价,但是确实能学到很多东西。 这本书对我非常深远。不是是投资,创业,还是其他领域,模块化思想都能帮上你。这本书告诉我们生万物…...

数据结构与算法之递归: LeetCode 78. 子集 (Typescript版)

子集 https://leetcode.cn/problems/subsets/ 描述 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1 输入:nums [1,2,3]…...

C# 使用 Fody 监控方法执行时间

写在前面 在做性能调优的时候,经常需要跟踪具体方法的执行时间;通过插入Stopwatch的方案对代码的侵入性太高了,所以引入了 MethodTimer.Fody 类库,采用编译时注入的方式给方法动态加上Stopwatch 跟踪代码,只需要在目标…...

J2EE征程——第一个纯servletCURD

第一个纯servletCURD 前言在此之前 一,概述二、CURD1介绍2查询并列表显示准备实体类country编写 CountryListServlet配置web.xml为web应用导入mysql-jdbc的jar包 3增加准备增加的页面addc.html编写 CAddServlet配置web.xml测试 4删除修改CountryListServlet&#xf…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...