【VS】【Qt】vs+ qt .natvis 失效问题

news2024/11/23 9:24:01

【VS】【Qt】vs+ qt .natvis 失效问题

.natvis文件用于调试时候自定义显示自定义类型的可视化提示。
一般这类文件存在
C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\Common7\Packages\Debugger\Visualizers路径下。

.natvis文件的规则在此不介绍,详见官网:在调试器中创建本机对象的自定义视图

在natvis失效的时候,检查以下选项是否被勾选,如果是,则解除勾选
在这里插入图片描述

如果没勾选还是无法显示正确的自定义试图,则考虑是否natvis文件出错。
在这里插入图片描述

在此处选择详细,在debug的时候检查需要可视化的自定义类型,直接对日志搜索你的自定义类名如:“QString”。如果出现error,检查error项对应的问题。然后根据error更改对应的natvis文件

最常见的错误
任然报错"##NAMESPACE##::QPoint"无效,

解决方法:删除qt4.natvis内的所有"##NAMESPACE##::"字符,tios调试时可正常显示

qt4 qt5版本比较常见 此处记录一下qt4的。

记录 qt4.natvis

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
	<!-- Large parts of this file were created by Ismo Haataja for Qt5.
		 I essentially ripped some parts away to get quite good support for my Qt4 installation.
	-->
	
	<Type Name="QString">
		<DisplayString>{d->data,su}</DisplayString>
		<StringView>d->data,su</StringView> 
	<Expand />
	</Type>

	<Type Name="QVector&lt;*&gt;">
		<AlternativeType Name="QStack&lt;*&gt;"></AlternativeType>
		<DisplayString>{{ size={p->size} }}</DisplayString>
		<Expand>
			<ArrayItems>
				<Size>p->size</Size>
				<ValuePointer>p->array</ValuePointer>
			</ArrayItems>
		</Expand>
	</Type>

	<Type Name="QByteArray">
		<DisplayString>{d->data,s}</DisplayString>
	</Type>
	
	<Type Name="QList&lt;*&gt;">
		<AlternativeType Name="QStringList"></AlternativeType>
		<AlternativeType Name="QQueue&lt;*&gt;"></AlternativeType>
		<DisplayString>{{ size={d-&gt;end - d-&gt;begin} }}</DisplayString>
		<Expand>
			<IndexListItems>
				<Size>d-&gt;end - d-&gt;begin</Size>
				<ValueNode>*reinterpret_cast&lt;$T1*&gt;((sizeof($T1) &gt; sizeof(void*))
					? reinterpret_cast&lt;Node*&gt;(d->array + d->begin + $i)->v
					: reinterpret_cast&lt;$T1*&gt;(d->array + d->begin + $i))
				</ValueNode>
			</IndexListItems>
		</Expand>
	</Type>

	<Type Name="QLinkedList&lt;*&gt;">
		<DisplayString>{{ size={d-&gt;size} }}</DisplayString>
		<Expand>
			<LinkedListItems>
				<Size>d-&gt;size</Size>
				<HeadPointer>d-&gt;n</HeadPointer>
				<NextPointer>n</NextPointer>
				<ValueNode>(*(QLinkedListNode&lt;$T1&gt;*)this).t</ValueNode>
			</LinkedListItems>
		</Expand>
	</Type>

	<Type Name="QMapNode&lt;*,*&gt;">
		<DisplayString>({key}, {value})</DisplayString>
		<Expand>
			<Item Name="[key]">key</Item>
			<Item Name="[value]">value</Item>
		</Expand>
	</Type>

	<Type Name="QMap&lt;*,*&gt;">
		<AlternativeType Name="QMultiMap&lt;*,*&gt;"/>
		<DisplayString>{{ size={d-&gt;size} }}</DisplayString>
		<Expand>
			<TreeItems>
				<Size>d-&gt;size</Size>
				<HeadPointer>d-&gt;header.left</HeadPointer>
				<LeftPointer>left</LeftPointer>
				<RightPointer>right</RightPointer>
				<ValueNode>*((QMapNode&lt;$T1,$T2&gt;*)this)</ValueNode>
			</TreeItems>
		</Expand>
	</Type>

	<Type Name="QHashNode&lt;*,*&gt;">
		<DisplayString Condition="next == 0">(empty)</DisplayString>
		<DisplayString Condition="next != 0">({key}, {value})</DisplayString>
		<Expand>
			<Item Name="[key]" Condition="next != 0">key</Item>
			<Item Name="[value]" Condition="next != 0">value</Item>
		</Expand>
	</Type>

	<Type Name="QHash&lt;*,*&gt;">
		<AlternativeType Name="QMultiHash&lt;*,*&gt;"/>
		<DisplayString>{{ size={d-&gt;size} }}</DisplayString>
		<Expand>
			<IndexListItems>
				<Size>d-&gt;numBuckets</Size>
				<ValueNode>*((QHashNode&lt;$T1,$T2&gt;*)d-&gt;buckets[$i])</ValueNode>
			</IndexListItems>
		</Expand>
	</Type>

	<Type Name="QHashNode&lt;*,QHashDummyValue&gt;">
		<DisplayString Condition="next == 0">(empty)</DisplayString>
		<DisplayString Condition="next != 0">({key})</DisplayString>
		<Expand>
			<Item Name="[key]" Condition="next != 0">key</Item>
		</Expand>
	</Type>
	
	<Type Name="QSet&lt;*&gt;">
		<DisplayString>{{ size={q_hash.d-&gt;size} }}</DisplayString>
		<Expand>
			<ExpandedItem>q_hash</ExpandedItem>
		</Expand>
	</Type>
	
	<Type Name="QVariant">
		<!--Region DisplayString QVariant-->

		<DisplayString Condition="d.type == QMetaType::Bool">{d.data.b}</DisplayString>
		<DisplayString Condition="d.type == QMetaType::Int">{d.data.i}</DisplayString>
		<DisplayString Condition="d.type == QMetaType::UInt">{d.data.u}</DisplayString>
		<DisplayString Condition="d.type == QMetaType::LongLong">{d.data.ll}</DisplayString>
		<DisplayString Condition="d.type == QMetaType::ULongLong">{d.data.ull}</DisplayString>
		<DisplayString Condition="d.type == QMetaType::Double">{d.data.d}</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QChar">{d.data.c}</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QVariantMap">
			{*((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QVariantList">
			{*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QString">
			{*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QStringList">
			{*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QByteArray">
			{*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QBitArray">
			{*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QDate">
			{*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QTime">
			{*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QDateTime">DateTime</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QUrl">Url</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QLocale">Locale</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QRect">
			{*((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QRectF">
			{*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QSize">
			{*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QSizeF">
			{*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QLine">
			{*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QLineF">
			{*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QPoint">
			{*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QPointF">
			{*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QRegExp">RegExp</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QVariantHash">
			{*((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
		</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QEasingCurve">EasingCurve</DisplayString>
		<DisplayString Condition="d.type == QMetaType::LastCoreType">LastCoreType</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QFont">Font</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QPixmap">Pixmap</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QBrush">Brush</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QColor">Color</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QPalette">Palette</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QImage">Image</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QPolygon">Polygon</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QRegion">Region</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QBitmap">Bitmap</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QCursor">Cursor</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QKeySequence">KeySequence</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QPen">Pen</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QTextLength">TextLength</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QTextFormat">TextFormat</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QMatrix">Matrix</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QTransform">Transform</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QMatrix4x4">Matrix4x4</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QVector2D">Vector2D</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QVector3D">Vector3D</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QVector4D">Vector4D</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QQuaternion">Quaternion</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QIcon">Icon</DisplayString>
		<DisplayString Condition="d.type == QMetaType::LastGuiType">LastGuiType</DisplayString>
		<DisplayString Condition="d.type == QMetaType::QSizePolicy">SizePolicy</DisplayString>
		<DisplayString Condition="d.type == QMetaType::User">UserType</DisplayString>

		<DisplayString>Unknown type</DisplayString>
		
		<!--End region DisplayString QVariant-->

		<!--Region DisplayView QVariant-->

		<StringView Condition="d.type == QMetaType::QChar">d.data.c</StringView>

		<StringView Condition="d.type == QMetaType::QString">
			*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
		</StringView>

		<StringView Condition="d.type == QMetaType::QByteArray">
			*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
		</StringView>

		<!--End region DisplayView QVariant-->

		<!--Region Expand QVariant-->

		<Expand>
			<ExpandedItem Condition="d.type == QMetaType::QVariantMap">
				*((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QVariantList">
				*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QString">
				*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QStringList">
				*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QByteArray">
				*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QBitArray">
				*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QDate">
				*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QTime">
				*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QRect">
				*((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QRectF">
				*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QSize">
				*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QSizeF">
				*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
				: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QLine">
				*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QLineF">
				*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QPoint">
				*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QPointF">
				*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
			<ExpandedItem Condition="d.type == QMetaType::QVariantHash">
				*((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
					: reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
			</ExpandedItem>
		</Expand>

		<!--End region Expand QVariant-->
	</Type>
</AutoVisualizer>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指 Offer 23 链表中环的入口结点

摘要 链表中环的入口结点_牛客题霸_牛客网 剑指 Offer II 022. 链表中环的入口节点 141. 环形链表 142. 环形链表 II 一、是否有环&#xff08;快慢指针&#xff09; 我们可以根据上述思路来解决本题。具体地&#xff0c;我们定义两个指针&#xff0c;一快一慢。慢指针每次…

了解Cesium的笛卡尔类型和位置变量的单位

var position Cesium.Cartesian3.fromDegrees(100, 100, 2); 前文输出了position变量&#xff0c;是一个六位数&#xff0c;还带有多位小数&#xff1b;下面来看一下相关类的定义和position的单位&#xff1b;单位如果不对的话放置的模型可能到屏幕外面&#xff1b; 看一下相…

太赫兹频段耦合器设计相关经验总结

1拿到耦合器的频段后&#xff0c;确定中心频率和波导的宽度和高度 此处贴一张不同频段对应的波导尺寸图 需要注意的是1英寸 2.54厘米&#xff0c;需注意换算 具体网址&#xff1a;矩形波导尺寸 | 扩维 (qualwave.com) 仅列举我比较常用的太赫兹频段部分 2.以220~320GHz频段&a…

《后疫情时代大众行为及情感变化研究报告》|人们的饮食、工作、运动、社交、娱乐、学习、购物有哪些改变?

疫情三年&#xff0c;改变了很多人的生命轨迹。有人长期居家&#xff0c;宅出了一身的厨艺&#xff1b;有人启动线上模式&#xff0c;习惯了居家办公&#xff1b;有人失去了工作&#xff0c;生活一度陷入困境&#xff1b;有人痛定思痛&#xff0c;准备换个城市换个活法。 个体…

项目管理工具dhtmlxGantt甘特图入门教程(十六):数据序列转化为XML和JSON

这篇文章给大家讲解dhtmlxGantt将数据转化为XML何JSON格式。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表&#xff0c;可满足应用程序的所有需求&#xff0c;是完善的甘特图图表库 DhtmlxGantt正版试用下载&#xff08;qun&#xff1a;764148812&#…

提取DWI数据的FA和MD

DWI简介 扩散加权磁共振成像&#xff08;DWI &#xff09;是使用特定的 MRI 序列以所获得的脑成像数据&#xff0c;该成像手段依靠水分子的扩散在 MR 图像中产生对比度。优于组织中的分子扩散不是自由的&#xff0c;而是反映了与许多障碍物&#xff08;例如大分子&#xff0c;纤…

福特FORD EDI流程指南

在此前的文章&#xff1a;福特FORD EDI需求分析中&#xff0c;我们为大家介绍了福特FORD的EDI平台——GEC Hub。与福特FORD建立EDI连接需要基于这个平台来进行。 供应商通过GEC Hub与福特建立EDI连接&#xff0c;需要做如下准备&#xff1a; 1.获得GSDB代码以及供应商代码 2.在…

是不是只能学IT互联网技术才有发展前途?

当然不是&#xff0c;三百六十行&#xff0c;行行出状元。 但我们需要认清一个现实是&#xff0c;我们正处于一个信息爆炸的时代&#xff0c;掌握紧跟潮流的技术&#xff0c;才可以让我们更自信地面对每天的生活&#xff0c;才有多余的精力、财力来享受生活。“人生在世&#…

华为机试题:HJ99 自守数(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

十八、本地方法栈的理解

本地方法栈(Native Method Stack) 1.Java虚拟机栈用于管理Java方法的调用&#xff0c;而本地方法栈用于管理本地方法的调用。 2.本地方法栈&#xff0c;也是线程私有的。 3.允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 1&#xff09;如果线程请求分…

深圳大学计软《面向对象的程序设计》实验8 静态与友元

A. 旅馆旅客管理&#xff08;静态成员&#xff09; 题目描述 编写程序&#xff0c;实现某旅馆的客人住宿记录功能。 定义一个Customer类&#xff0c;要求输入客人的姓名&#xff0c;创建一个Customer对象。类声明如下&#xff1a; 调用类的Display函数输出客人ID&#xff…

1_机器学习概述—全流程

文章目录1 机器学习定义2 机器学习常见应用框架&#xff08;重点&#xff09;3 机器学习分类3.1 监督学习&#xff08;Supervised learning&#xff09;3.2 无监督学习&#xff08;Unsupervised learning&#xff09;3.3 半监督学习&#xff08;Semi-Supervised Learning&#…

每年来一次的系统重装和磁盘整理(备忘步骤)

前言 电脑用了一段时间&#xff0c;要么C盘炸裂&#xff0c;要么你无意更新CPU炸裂&#xff0c;你所遇到的各种问题&#xff0c;没有什么事重装解决不了的。 思路 首先&#xff0c;重要的东西都转存C盘之外的盘&#xff0c;重要的是养成习惯。我C盘基本没重要的东西&#xf…

redis数据结构的适用场景分析

1、String 类型的内存空间消耗问题&#xff0c;以及选择节省内存开销的数据类型的解决方案。 为什么 String 类型内存开销大&#xff1f; 图片 ID 和图片存储对象 ID 都是 10 位数&#xff0c;我们可以用两个 8 字节的 Long 类型表示这两个 ID。因为 8 字节的 Long 类型最大可以…

云HIS系统源码 医院his源码 云his源码

大型医院his系统源码 SaaS运维平台多医院入驻强大的电子病历完整文档 &#xff0c;有演示 一、系统概述&#xff1a; 基层卫生健康云是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子…

【Linux学习】菜鸟入门——gcc与g++简要使用

一、gcc/g gcc/g是编译器&#xff0c;gcc是GCC(GUN Compiler Collection&#xff0c;GUN编译器集合)中的C编译器&#xff1b;g是GCC中的C编译器。使用g编译文件时会自动链接STL标准库&#xff0c;而gcc不会自动链接STL标准库。下面简单介绍一下Linux环境下&#xff08;Windows差…

阿里云ECS服务器的6大功能组件

阿里的云服务在国内可以说是首屈一指的了&#xff0c;因此他们家的云服务器也是最受欢迎的。那么&#xff0c;你知道阿里云服务器ECS有哪些功能组件吗&#xff1f;不清楚不要紧&#xff0c;下面服务器吧小编带大家来看看。 在了解之前我们来看一张阿里云服务器ECS的产品组件架…

3.SpringSecurity请求流转的本质

SpringSecurity请求流转的本质 1. SpringSecurity核心源码分析 分析SpringSecurity的核心原理&#xff0c;那么我们从哪开始分析&#xff1f;以及我们要分析哪些内容&#xff1f; 系统启动的时候SpringSecurity做了哪些事情&#xff1f;第一次请求执行的流程是什么&#xff…

51单片机串口通讯原理及程序源码-----day8

51单片机串口通讯原理及程序源码-----day8 1.定义单片机为TTL电平&#xff1a;高 5V 低 0V RS232电平&#xff1a; 计算机的串口高 -12V 低12V 所以计算机与单片机之间通讯时需要加电平转换芯片CH340T 、 MAX232。 2.通信分类&#xff1a; &#xff08;1&#xff09;并行通信通…

Python-异常处理-try-except-else-finally

文章目录1.异常2.try/except3.try/except/else3.try/except/else/finally4.异常错误列表5.作者答疑1.异常 执行 try 子句&#xff08;在关键字 try 和关键字 except 之间的语句&#xff09;。如果没有异常发生&#xff0c;忽略 except 子句&#xff0c;try 子句执行后结束。如…