当前位置: 首页 > 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…...

StructBERT文本相似度-中文-通用模型效果展示:电商商品描述语义聚类案例

StructBERT文本相似度-中文-通用模型效果展示:电商商品描述语义聚类案例 1. 项目概述 StructBERT中文文本相似度模型是一个基于百度深度学习技术的高精度语义理解工具,专门用于计算中文句子之间的语义相似度。这个模型能够理解中文语言的深层语义&…...

宇树A1电机折腾笔记

文章目录电脑SDK控制变态的硬件接线环境配置下位机直接控制上图就是笨笨的宇树A1,这是我目前为止转过的最难转的电机。电机的说明书、SDK链接都来自MATH-286-Pro的视频提供:宇树A1相关资料、宇树官方SDK仓库。这篇笔记分两部分,先使用SDK驱动…...

别再死记硬背DH参数表了!用Python从零推导PUMA560机器人正运动学(附完整代码)

用Python实战解析PUMA560机器人运动学:从DH参数到三维可视化 在机器人学领域,正运动学分析是理解机械臂运动原理的基础。许多初学者面对抽象的Denavit-Hartenberg(DH)参数和复杂的坐标系变换时,常常陷入死记硬背的困境…...

Python高效处理字符串去重的5种实用技巧

1. 字符串去重的核心逻辑与应用场景 字符串去重是数据处理中最基础却高频的操作之一。想象你手里有一串钥匙,其中几把是重复的,去重就是帮你挑出唯一的那几把。在Python中处理用户输入、日志清洗或数据预处理时,我经常遇到需要去除重复字符的…...

OpenClaw技能共享:将自研SecGPT-14B检测模块发布到ClawHub

OpenClaw技能共享:将自研SecGPT-14B检测模块发布到ClawHub 1. 为什么需要共享安全检测技能 去年我在做安全日志分析时,经常需要手动编写正则表达式匹配攻击特征。直到发现OpenClaw可以通过自然语言描述自动生成检测规则,才意识到AI自动化在…...

VS2019+CMake实战:Super4PCS点云配准从源码编译到运行全流程指南

VS2019CMake实战:Super4PCS点云配准从源码编译到运行全流程指南 在三维视觉和机器人领域,点云配准一直是核心难题之一。Super4PCS算法作为4PCS的改进版本,以其在低重叠率点云上的优异表现,成为工业检测和SLAM系统中的热门选择。本…...

LLMKG+ 知识图谱改进实战指南(非常详细),大模型提升质量与覆盖从入门到精通,收藏这一篇就够了!

LLMKG+: Systematically improving knowledge quality and coverage in KGs using LLMs – A case study in medical domain 摘要 本文提出了LLMKG框架,首次系统性地解决了知识图谱中三元组级别的语义冗余问题。该框架结合检索增强生成与分层扩展过滤机…...

从 LLM 到 OpenClaw:七步看懂 Prompt、Memory、MCP、Skills、Agent

从 LLM 到 OpenClaw:七步看懂 Prompt、Memory、MCP、Skills、Agent 这两年 AI 术语越来越多:LLM、MCP、Agent、Skills、OpenClaw。 如果你不是技术背景,第一次看到这串词,基本都会懵。下面我用一个统一场景来讲:把 AI…...

嵌入式IMU姿态解算:轻量级卡尔曼滤波器实现Pitch/Roll估计

1. 项目概述Kalman滤波器库是一个面向嵌入式姿态解算的轻量级C语言实现,专为资源受限的MCU(如STM32F0/F1/F4系列、nRF52、ESP32等)设计。其核心工程目标明确:在无磁力计辅助、仅依赖IMU原始数据(加速度计陀螺仪&#x…...

Skills 系统——让 AI 秒变专家

1. 技能的本质:提示词工程 在 nanobot 中,一个技能就是一个文件夹,核心是里面的 SKILL.md。 nanobot内置的skills放在project_path/nanobot/skills目录下,用户自定义的skills放在workspace/.nanobot/skills目录下 以 weather 技…...