【uml源码】【cfc 源码】【源码合成】dlv源码

2024-11-18 22:41:00 来源:python网络编程源码 分类:知识

1.golang调试利器 dlv 的使用姿势
2.kubelet 远程调试方法
3.goland远程debug?
4.3D模型格式全解|含RVT、3DS、DWG、FBX、IFC、OSGB、uml源码OBJ等70余种
5.GO delve(dlv)调试工具笔记及实操
6.panic、recover、defer深入浅出

dlv源码

golang调试利器 dlv 的使用姿势

       面对云原生部署带来的挑战,本地开发环境与集群间的网络隔离使得调试工作变得复杂。访问集群内数据库和依赖服务的困难性迫使开发者在本地无法完成充分调试,而频繁编译和部署以完善日志收集的繁琐操作显著降低了开发效率。回想过去在单应用程序开发时,借助编辑器提供的功能,可以在本地轻松实现修改与调试。然而,在容器环境下,安装编辑器进行调试成为不可能的任务。在这种背景下,我们迫切需要一种轻量级、易于在Linux环境中操作的调试工具,能够提供快速、高效的问题诊断解决方案。

       在这里,dlv(Go Debugging Library)脱颖而出,成为理想的调试利器。它不仅能够在容器环境下提供便捷的调试功能,甚至在熟练使用后,其调试效率可能超越传统的编辑器调试方式。dlv的成功之处在于其简洁易用的特性,使得开发者能够如同操作ls、cat等命令般熟练掌握。

       dlv的安装过程相对简单。通过访问其GitHub仓库,开发者可以直接通过`go install`命令将其安装至本地的`$GOPATH/bin`目录下。在容器环境下,考虑到可能无法安装Go环境,可以采取将本地dlv二进制文件复制至`$PATH`目录中的方法来实现安装。安装完毕后,通过执行`dlv version`命令验证其可用性。

       在调试过程中,dlv提供了一系列实用的命令和功能。对于已存在的进程,`attach`命令尤为关键,它允许开发者直接接入运行中的进程进行调试,尤其是在处理Web应用程序时极为便利。而针对没有现成进程、仅有一个二进制可执行文件的情况,`exec`命令则能够启动进程并进行调试。通过`--`参数,开发者还可以为程序传递所需的额外参数,使得调试过程更加灵活高效。

       在深入调试时,`debug`命令允许直接跳入源码文件进行调试,省去了手动编译的步骤,只需指定包名和源码存放的文件夹即可。对于测试文件的调试,虽然使用频率较低,但`test`命令同样提供了相应的支持。此外,`help`命令提供了详细的使用手册,而`version`命令则用于查看dlv的版本信息。

       掌握dlv的调试指令是实现高效调试的关键。执行这些指令后,cfc 源码开发者可以实现诸如单步执行、查看变量值、退出当前函数等操作,从而更深入地探索代码运行时的行为。断点管理功能允许开发者对断点进行增删改查,其中使用`break`命令创建断点时,提供了多种方法供选择。进一步地,`debug`命令的使用则能够直接控制程序执行流程,而`locals/vars/display`命令则提供了对变量和参数的管理,这些功能都支持正则表达式的指定,具体用法可以通过`h locals`命令查看。

       掌握dlv的使用技巧不仅能够辅助日常调试工作,还能在深入分析项目原理时提供强大的支持。本文仅介绍了dlv的基本使用姿势,未来在其他原理性分析的文章中,我们也将持续探索并应用这一工具,以实现对源代码更深层次的理解和掌握。

kubelet 远程调试方法

       Kubelet远程调试方法详解

       Kubelet作为Kubernetes的核心组件,可以通过系统服务管理和编译工具进行远程调试。首先,理解kubelet的启动命令至关重要。在v1..4的K8s集群中,kubelet作为systemd服务,其配置文件位于</etc/systemd/system/kubelet.service.d/-kubeadm.conf>。通过执行ps -ef | grep /usr/bin/kubelet,可以查看完整的启动命令。

       若需修改kubelet命令,可以先停止服务,然后使用相应参数重新启动,或者修改systemd配置后重启服务。编译kubelet时,推荐使用Kubernetes makefile源码中的编译指令,调整GOLDFLAGS和GOGCFLAGS以保留调试信息。编译完成后,kubelet二进制文件会位于_output/bin/kubelet。

       对于Go语言的调试,Delve是一个高效工具,尤其适合调试标准工具链构建的Go程序。可以通过安装命令轻松获取,并使用它来调试kubelet。例如,使用dlv命令行进行调试步骤包括设置地址和端口,以及在GoLand IDE中配置并启动kubelet进行调试。

       除了Kubelet,其他容器软件如runc和docker-cli也可通过修改编译命令进行调试。例如,runc和dockerd的编译过程中,需要在scripts/build/binary或hack/make/.binary文件中相应位置调整编译参数。

       获取更多详细教程和实践步骤,可以参考ssst0n3.github.io/post/...。通过以上步骤,你可以有效地对kubelet和其他容器软件进行远程调试,提升开发效率。

goland远程debug?

       vscode及goland远程连接Linux系统

       使用vscode中的ssh连接远程的Linux机器时,vscodesshserver卡在copyingvscodeservertohostwithscp。有时候vscodessh反复提示输入密码,还是无法连接。

       vscodessh损坏。由于vscodessh受到病毒入侵,导致vscodessh损坏,因此其连接linux环境后,不能使用linux系统。源码合成vscodessh是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。

       我们先在windows主机上下载TigerVNC软件包。TigerVNC是一款开源免费的VNC连接软件,我们可以通过它对带桌面的linux主机进行远程。这里,我们从SourceForge网站下载TigerVNC软件包。

       五个非常好用的Linux远程连接工具:第一款:Xshell(https://)Xshell是一个非常强大的安全终端模拟软件,它支持SSH1,SSH2,以及Windows平台的TELNET协议。

       golang不能使用debug

       编译centos上的可执行文件的时候需要交叉编译。

       debug是一个调试命令,本来就是外部命令,不是内部命令。全名是debug.exe,DOS的内部命令是由Commond提供的,DOS启动时会加载到内存中所以叫内部命令。

       golang空指针卡死解决方法如下:出错的位置在执行Excute函数处,debug还是搜索百度都找不到解决方案。解决方案就是不用Goland编译文件。直接使用gobuild编译文件后,再执行,访问网页就不报错了。

       Go语言在缺省设置下不会生产奔溃转储。但是当你把GOTRACEBACK环境变量设置成“crash”,你就可以用Ctrl+backslash才触发奔溃转储。

       方法一:安装位系统就可以使用debug,如windowsxp的位、win7的位、win8的位、win的位都可以使用debug。方法二:如果你一定要用位系统,当然也可以。

       设置环境变量GOPATHGOPATH的值可以有多个,用半角分号间隔,但不能以其结束,设置完成后需要重新做gomobileinit。

go语言编辑器goland怎样打debug

       菜单依次选择“Run”-“Editconfigurations”如下图所示:在弹出的对话框中按照如下图所示配置:点击“debug”按钮,如下图所示:设置断点就可以开始调试啦。

       这是因为,goland在debug时使用的是dlv插件,该插件还不支持位程序的调试,直接执行run就可以了。在使用命令行编译go程序时,可以使用goenv命令查看当前编译环境设置。

       )Print:输出到控制台(不接受任何格式化,它等价于对每一个操作数都应用%v)print在golang中是属于输出到标准错误流中并打印,官方不建议写程序时候用它。

       a.使用您的文本编辑器,在fuzz目录中创建一个名为main.go的文件。独立程序(与库相反)始终位于package中main。此函数将接受string,使用byte进行循环,并在最后返回反转的字符串。

       Linux平台以gdb为常用。IDE自带的调试器以VC0为例,编写完代码后,按快截键盘F,即可进入调试,此时右键,选择“gotodisassembly即可查看到程序的jquery 源码$反汇编代码。一般这种情况,主要是为了对C语言进行反汇编学习。

       你在编译器里面build一下,然后去\bin\debug目录下找.exeexe就是可执行文件了。运行的时候可能需要用到debug目录下的其他文件(如配置文件、dll等),所以需要把debug下的所有文件都放到一起。

goland,cgo加载位DLL遇到的问题

       经过搜索猜测,是目标机器架构选择错误导致的。但是在环境配置中,已经正确的选择了Arch为,尝试使用liteIDE或者直接使用命令行编译,都能够正常编译。唯独使用GoLand不行。

如何使用GoLand调试beego项目

       1、参考上面发的文档连接准备一个beego项目。

       2、将新建的BeegoDemo1,导入到GOLAND中配置gomodules和goproxy,配置方法见:GOLAND中配置GOMODULE和GOPROXY直接点击运行或通过beerun来运行。beego是基于八大独立的模块之上构建的,是一个高度解耦的框架。

       3、项目管理方式不符合go官方标准。代码提示不能自动导入(eclipse也不能),不过如果你的项目是以包为单位的,那么另当别论。

       4、运行nohup./beego_project关闭终端。在本机浏览器中输入IP地址+端口号或者服务器网址。就可以看到你的项目了。这是本人的一个练手项目。登录的用户名和密码都是admin。cookies有效时常为:7*小时。

       5、需在service上安装beego源码和beego开发工具Beego开发工具带有很多Beego命令。比如beegonew创建项目,beegorun运行项目等。用beego运行项目,项目自带热更新。

3D模型格式全解|含RVT、3DS、DWG、FBX、IFC、OSGB、OBJ等余种

       本文整理自老子云平台公众号。老子云平台提供全行业+三维模型格式展示、转格式、轻量化服务。本文将对已开放的3D模型格式进行统一梳理说明。

       以下是按照字母顺序排列的三维格式描述:

       3dm:Rhino 3D Model文件,由Rhinoceros开发,用于保存二维和三维图形。

       3ds:3D Studio场景文件,由Autodesk开发,用于3D建模、动画和渲染。

       3dxml:Dassault Systemes的3D XML文件格式,由Dassault Systèmes开发,包含丰富的3D图像模型信息。

       amrt:老子云自研的国产3D格式,由老子云开发,memsql 源码特点为存储体量小、加载速度快,支持多种三维格式转换为统一标准格式。

       arc:Norton Backup Archive文件,由Symantec Corporation开发,可用CAD软件打开。

       asm:Assembly Language Source Code File,由Microsoft Corporation开发,用于低级语言源代码。

       catpart:CATIA V5 Part File,由Dassault Systèmes开发,用于3D部分文件存储。

       catproduct:CATIA V5 Assembly File,由Dassault Systèmes开发,用于组件制造过程的3D装配文件。

       cgr:CATIA Graphical Representation File,由Dassault Systèmes开发,用于CAD文件的可视化存储。

       dae:Digital Asset Exchange File,由Sony开发,用于交互式3D应用程序的协作设计活动。

       dlv:CATIA 4 Export File,由Dassault Systèmes开发,用于设计数据导出。

       dwf:Autodesk Design Web Format File,由Autodesk开发,用于2D/3D图形文件格式,旨在丰富设计数据。

       dwg:AutoCAD Drawing Database File,由Autodesk开发,用于AutoCAD中的二维或三维图数据库。

       dxf:Drawing Exchange Format,由Autodesk开发,用于CAD矢量图像文件。

       exp:CATIA 4 Export File,由Dassault Systèmes开发,用于设计数据导出。

       fbx:ArcView Spatial Index File For Read-Only Datasets,由ESRI和Kaydara(Autodesk)开发,用于**界和视频游戏开发的流行专有文件格式。

       glb:STK Globe File,由Analytical Graphics开发,与STK程序相关,用于3D模型的建模和任务。

       gltf:GL Transmission Format File,由Trimble Inc.开发,用于3D数据保存在glTF(三维)模型文件。

       iam:Inventor Assembly File,由Autodesk开发,用于3D CAD装配文件。

       ifc:Industry Foundation Classes File,由buildingSMART开发,用于3D图形、CAD-CAM-CAE文件的开放文件格式。

       ifczip:Industry Foundation Classes (zipped),由buildingSMART开发,IFC文件的压缩版本。

       iges:IGES Exchange Format,由Redway3d和其他开发者开发,用于国际标准的3D线框模型交换。

       igs:Initial Graphics Exchange Specification Drawing File,由美国空军开发,基于IGES的图形文件格式,用于保存2D和3D图形。

       ipt:Inventor Part File,由Autodesk开发,用于Autodesk Inventor软件中的零件或物体。

       jt:JT Open CAD File,由Siemens PLM Software开发,用于数据共享、产品协作和可视化的开放高性能存储格式。

       mfl:ModFit LT Analysis Report File,由Verity Software House开发,用于MODFIT LT程序分析的DNA模式。

       model:Dassault Systèmes开发的CATIA软件的3D建模格式。

       neu:Pro/ENGINEER Neutral File,由Parametric Technology Corporation开发,用于Pro / ENGINEER程序创建的CAD文件。

       obj:Wavefront 3D Object File,由Wavefront Technologies开发,用于通用的3D图像文件格式。

       osgb:Open Scene Gragh Binary,由OpenSceneGraph开发,用于地图缓存文件和实景三维倾斜摄影模型。

       par:Solid Edge Part File,由Siemens PLM Software开发,用于Solid Edge三维建模软件的文件。

       pkg:Midtown Madness 3D Model,由Rockstar Games开发,用于游戏的3D模型和图形数据。

       prc:Product Representation Compact File,由Adobe Systems Incorporated开发,用于表示三维模型和装配结构。

       prt:Pro/ENGINEER Part File,由PTC开发,用于Pro / ENGINEER CAD程序的文件。

       psm:Solid Edge Document Format,由Siemens PLM Software开发,用于Solid Edge创建的3D零件。

       pts:PointCloud 3D File,由Exelis Inc.开发,用于点云三维数据。

       ptx:PageMaker Template File,由Adobe Systems Incorporated开发,用于PageMaker的7.0模板。

       pwd:Solid Edge Weldment Document,由Siemens PLM Software开发,用于三维CAD制造程序Solid Edge的CAD文件。

       rvt:Revit Project File,由Autodesk开发,用于建筑信息模型(BIM)软件。

       sab:ACIS SAB Model File,由Spatial Corp开发,用于ACIS建模软件的三维模型。

       sat:ACIS SAT 3D Model File,与空间3D ACIS建模软件相关的CAD文件类型。

       session:CATIA 4 Session File,由Dassault Systèmes开发,用于CATIA软件的会话文件。

       sldasm:SolidWorks Assembly File,由Dassault Systèmes开发,用于SolidWorks 3D CAD软件的装配文件。

       sldprt:SolidWorks CAD Part File,由Dassault Systèmes开发,用于SolidWorks的关联文件。

       step:STEP 3D Model,用于3D模型文件的ISO格式,由未知开发者开发。

       stl:Stereolithography File,用于保存标准形式的CAD文件,由3D Systems开发。

       stp:STEP 3D CAD File,用于表示和工业产品数据交换的ISO标准,由未知开发者开发。

       stpz:压缩的STEP文件。

       u3d:Universal 3D File,由Universal 3D File开发的通用3D文件格式。

       unv:I-DEAS Data File,由Siemens AG开发,用于Windows和Unix操作系统的数据保存。

       vda:Targa Bitmap Image File,由Microsoft Corporation开发的Raster光栅图像文件。

       vrml:Virtual Reality Modeling Language 3D World,由开源开发者开发的虚拟现实建模语言相关的3D世界文件。

       wrl:VRML World,由未知开发者开发的虚拟现实建模语言创造的虚拟世界文件。

       x_b:Parasolid Model (binary),由Siemens PLM Software开发的Parasolid 3D CAD应用程序。

       x_t:Siemens PLM Software开发的与Parasolid软件相关的文件,用于存储几何形状、拓扑和彩色三维模型数据。

       xas:PTC Pro/Engineer Assembly File,由Parametric Technology Corporation开发的用于Microsoft Windows平台的3D设计解决方案。

       xmt:Binary Data,用于ug软件的三维格式。

       xmt_bin:Parasolid 3D图像文件。

       xmt_txt:Parasolid CAD Format,包含存储在简单的ASCII文本格式的文件。

       xpr:Pro/ENGINEER Part Instance Accelerator File,由Parametric Technology Corporation开发的用于加速3D产品设计应用中零件加载的文件。

       xyz:Cartesian Chemical Modeller Input,由Hypercube, Inc.开发的化学分子建模软件的文件扩展名。

       以上格式的PDF文档可以免费在老子云平台公众号后台留言获取。

GO delve(dlv)调试工具笔记及实操

       本文详细记录了使用Linux下的delve调试工具在调试Go代码时的常用操作和指令。通过这些工具和指令,无论是对应用进行调试还是追踪源码,都能获得高效且精准的体验。以下是一些关键点:

       在使用Go版本1..8和delve版本1.7.2进行调试时,首先需要确保已正确安装delve。

       常见的dlv指令包括:

       1. 断点管理:通过`break`设置断点,使用`toggle`进行断点的启用或禁用,`clear`或`clearall`用于删除断点。

       2. 程序执行与调试:`attach`用于调试阻塞程序,例如HTTP服务器;`exec`用于调试编译后的可执行文件。

       在调试时需注意,使用`-v`选项进行`go build`时,编译器可能会进行优化,导致内联函数在断点调试时无法进入函数体。为避免这种情况,可使用`-gcflags "-N -l"`参数。

       3. `test`指令用于调试单元测试,要求测试代码在`GOPATH`路径下。

       4. `help`指令提供帮助信息,`debug`指令从主包的`main.go`开始调试,需确保相关包位于`GOPATH`内。

       使用`case1`和`case2`进行`attach`和`exec`操作分别针对阻塞程序和可执行文件调试。`case3`和`case4`分别展示了帮助信息和从主包开始的调试。

       `case5`中的`test`指令演示了如何调试单元测试。

       在调试过程中,`case6`的`version`指令用于查看dlv版本,`case7`的`break`指令用于设置断点,`case8`的`breakpoints`命令打印当前所有断点状态。

       当断点设置后,执行`case`的`continue`命令将程序执行到下一个断点,而`case`的`toggle`命令则用于断点的启用或禁用。

       断点调试时,`case`的`continue`命令可用于执行程序直至下一个断点,而`case`的`next`命令则用于执行一行代码。`case`的`restart`命令允许从主包开始重新执行程序,而`case`的`step`命令则用于执行一行代码,特别是当遇到函数调用时。

       在遇到需要查看函数内部执行流程的情况,`case`的`step-instruction`命令特别有用,它允许执行单个机器指令,特别是在对汇编代码进行调试时。

       当需要从当前函数返回,`case`的`stepout`命令能够帮助直接跳出当前函数。

       使用`case`的`args`命令可查看当前函数的输入参数值,而`case`的`display`命令则允许用户监控变量在执行过程中的变化。

       `case`的`locals`命令用于打印当前函数的局部变量,有助于理解变量的初始状态。`case`的`print`命令则用于打印特定变量或表达式,进行简单的测试。

       `case`的`set`命令允许用户设置变量值,这对于调试边界条件或追踪代码中的异常情况尤为重要。

       `case`的`vars`命令用于打印全局变量,适用于自己的全局变量或了解运行时的内部状态。`case`的`whatis`命令则用于查询变量类型。

       `case`的`disassemble`命令用于反编译代码,适用于追踪源码逻辑或深入理解Go底层实现。反编译过程中的常见问题和解决方法可以在特定的文档或资源中找到。

       `case`的`exit`命令用于结束调试会话。

       `case`的`funcs`命令用于查看所有方法,方便追踪特定包或方法的调用情况。

       `case`的`help`命令能够提供任何指令的使用说明。

       `case`的`list`命令用于查看代码执行位置,帮助用户理解当前调试过程的上下文。

       文章鼓励调试者分享更多实用的dlv指令,以丰富调试工具的使用经验和技巧。

panic、recover、defer深入浅出

       程序异常处理是软件开发中不可避免的一部分,无论是运行时检测到的异常还是开发者主动抛出的异常,都需要妥善处理。在某些编程语言中,如C++和Java,这类异常通常被称作Exception,它们由抛出异常和捕获异常两部分组成。在Go语言中,异常则以panic和recover方法的形式存在,其中panic用于抛出异常,recover用于从panic中恢复。

       我们先来看一个简单的panic和recover的使用示例。如果在程序中没有使用recover方法,当panic被抛出时,整个程序会异常退出,后续的代码将不会执行。但是,如果在抛出panic之后使用了recover方法,程序可以在panic中捕获信息,并继续执行后续代码。

       Go语言的内置函数panic用于终止程序的正常执行流程并发出panic。当函数F调用panic时,F的执行将被终止,并返回到调用者,该过程会一直跟随堆栈向上,直到当前goroutine中的所有函数都返回,此时程序崩溃。panic可以通过直接调用panic函数产生,也可能由运行时的错误,如数组越界访问等引发。

       另一方面,内置函数recover的作用是在panic中重新控制goroutine的执行。recover必须通过defer来运行。在正常的执行流程中,调用recover将会返回nil且没有其他影响,但如果当前的goroutine产生了panic,recover将会捕获到panic抛出的信息,并恢复其正常的执行流程。

       通常,我们可以通过手动调用panic来模拟程序异常情况,或者利用运行时提供的工具如dlv来调试程序,找出异常的具体来源。dlv是一个命令行工具,包含了多个调试命令,如运行程序、下断点、打印变量、step in、step out等,常用于与go语言编辑器如vscode、golang等集成进行可视化调试。

       程序中出现panic通常源自空指针访问、数组越界或除数为零等操作。在编译后的程序代码中,除了正常的逻辑,如除法运算,数组越界和空指针访问等异常情况同样会被处理,通过runtime.gopanic进入panic流程。数组越界与除数为零相似,通过编译器逻辑进行检测,而空指针访问则通过特定的机制进行处理。

       Defer关键字与panic和recover有着密切的关系。Defer语句将函数调用保存到一个列表中,这些调用将在当前函数返回前执行,确保执行各种清理操作。Defer的函数调用遵循先进后出的规则,即先defer的函数最后执行。通过示例程序可以看到,即使在函数中发生panic,调用defer的函数依然能正常执行。

       recover函数的调用必须使用defer关键字,因为defer的函数调用会始终被执行。当在示例程序中打开defer recover部分时,程序可以正常执行并正常退出。

       源码分析有助于深入理解panic及recover的处理流程。在Go源代码中,panic对应于runtime.gopanic,recover对应于runtime.gorecover。通过对源码进行简化分析,可以更好地理解异常处理机制的工作原理。

       最后,我们可以通过简单的例子演示如何在recover后打印panic信息及阅读panic信息。例如,处理一个除零的panic,输出中包含了panic原因和调用堆栈。阅读堆栈信息时,可以首先找到引发panic的具体代码行数,结合原因信息,通常可以快速定位到异常发生的原因。此外,还存在一种fatalpanic,这类异常无法使用recover恢复,通常是由运行时检测到不可恢复的操作时抛出,如并发写入map时发生的异常。

slmgr.vbs文件主要有哪些功能及用途?

       探索VBS脚本:深入理解slmgr.vbs的全能魔法

       对于电脑新手来说,slmgr.vbs这个神秘的文件可能鲜为人知,但其在Windows系统管理中的作用不可小觑。它不仅是激活状态和密钥信息的查看工具,更是微软授权管理的幕后英雄。让我们一起揭开其神秘面纱,掌握它的使用技巧。

       激活助手

       日常操作中,我通常仅用它来确保系统激活,但遇到问题时,slmgr.vbs就成了宝贵的解决武器。意识到知识的不足,我决定系统学习这个文件,弥补我在微软产品激活认证方面的空白。

       深入源码探索

       作为脚本文件,我好奇地打开了它,代码密集但充满奥秘。虽然我们关注的是它的实用功能,但程序员的智慧确实令人赞叹。

       操作方法揭秘

       slmgr.vbs位于System目录,有两种执行方式:一是直接在“运行”中输入命令,二是以管理员权限打开命令提示符,通过cscript执行,如"cscript C:windowssystemslmgr.vbs -dli"。前者简便易行。

       激活命令详解

       最近我关注slmgr.vbs,是因为它在Windows 8 KMS激活中的关键作用。例如,用slmgr /ipk 替换产品密钥,/skms 设置KMS服务器,以及/ato尝试在线激活。这些命令在我们之前的文章中虽然未详述,现在正是揭示它们的时候。

       详细信息查看

       slmgr.vbs -dlv命令展示了丰富激活信息,如系统版本、激活ID等,还有那神秘的“剩余Windows重置计数”,我们稍后会专门讨论。而-dli则是它的简化版,只需一目了然的图示。

       安全与管理

       slmgr.vbs -cpky清除了产品密钥,保护系统安全。这一操作尤为重要,尤其是对企业用户,我会在后续文章中深入探讨。

       至此,slmgr.vbs的命令库还远未穷尽,每一个命令都像一把钥匙,解锁Windows系统管理的更多可能。希望这份分享能帮助你更好地理解和利用slmgr.vbs的强大功能。

本文地址:http://8o.net.cn/news/46f152298431.html 欢迎转发