使用Windbg排查C++软件安装包安装时被安全防护软件拦截导致安装线程堵塞卡住的问题

目录

1、问题描述

2、初步分析

3、将Windbg附加到安装包进程上进行分析

4、在Windbg中查看相关变量的值,并设置断点进行动态调试

4.1、在Windbg中查看相关变量的值 

4.2、在Windbg中使用bp命令设置断点进行动态调试

5、腾讯电脑管家已经退出,但其实时防护服务还在后台运行,仍然会拦截安装包的注册表操作

6、可以到腾讯电脑管家中查看拦截记录,可以尝试去关闭掉腾讯电脑管家对安装包程序的拦截操作

7、让软件“绕过”360安全卫士或金山毒霸的拦截

7.1、360安全卫士的软件认证检测平台

7.2、金山毒霸的软件认证检测平台 

8、最后


C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/125529931C/C++实战进阶(已更新到460多篇,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/140824370VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/124272585Windows C++ 软件开发从入门到精通(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_12695902.htmlC++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_2276111.html       同事使用我们的软件安装包安装软件,但安装进度快要跑满时一直没有结束,于是测试人员找到我,让我去分析一下。经排查,是安装包执行到写注册表的操作时被腾讯电脑管家(安全防护软件)识别为危险的行为,将写注册表的操作给拦截,导致安装线程堵塞卡住,所以安装过程始终没有完成。本文详细讲解一下这个问题的排查过程详细讲述如何使用Windbg去动态调试目标进程(在Windbg中查看变量的值、使用bp命令设置断点调试)并给出软件“绕过”360安全卫士与金山毒霸拦截的有效办法,以供大家借鉴或参考。

1、问题描述

       某天同事拿到我们最新发布的软件安装包去安装软件,但安装进度快要跑满时,一直没有结束,等了好久一直卡在最后的那一点进度上:

一直没有完成安装,应该是安装过程卡在哪里不动了。这个问题是必现的,在任务管理器中将当前未完成安装的进程结束掉,重新发起安装,还是有问题。于是测试人员找到我,让我去分析一下。

2、初步分析

       为了更自主的控制软件安装包、更方便地定制安装包的UI界面,我们不再借助InstallShield、Inno Setup、NSIS等专业打包工具,我们自己用代码编写一个安装包程序,实现这些打包工具类似的功能,比如:

1)将要打包的所有文件做成压缩包,作为资源添加到安装包工程中。执行安装时从工程资源中将压缩包取出来,然后进行解压。
2)执行文件的拷贝操作。将打包的文件拷贝到安装目录中,并将部分文件拷贝到系统相应的目录中。
3)注册相关控件。程序中可能包含ocx或者ATL控件,这些控件在安装时需要向系统注册。
4)创建桌面快捷方式和开始菜单快捷方式。
5)向注册表中写入安装卸载注册表信息。其中最重要的是安装路径信息,卸载程序时需要从注册表中读取安装路径,将文件从安装路径中删除掉。

       在开发安装包程序时,要将上述讲到的将程序文件解压并拷贝到安装路径中、创建桌面及开始菜单快捷方式、注册控件、向注册表中写入信息等安装操作放到一个新开的线程中去执行,不能放在程序的UI主线程中执行。因为这些操作比较耗时,直接放在UI线程中去执行,会导致UI线程的堵塞,导致UI界面的堵塞。然后根据当前完成的操作,去更新UI界面中显示的安装进度。

       在本问题中,安装进度卡在最后的那一点进度上,估计是安装线程中执行某一安装操作时发生了堵塞或卡死根据以往的经验,可能是以原因导致的:

1)可能是线程间发生了死锁,导致线程卡死。以前我们遇到过,安装中的线程与输入法注入模块中的线程之间发生死锁,或者安装包中的线程与系统库中的系统线程之间发生了死锁。
2)可能是安装包中执行了一些对系统安全敏感的操作,被安全防护软件拦截,导致线程卡死(堵在某个操作上不返回)。比如向系统注册控件、写注册表等,电脑上安装的安全防护软件(比如腾讯电脑管家、360安全卫士等)觉得这些操作会对系统安全产生影响,可能会弹出让用户选择是否阻止操作的提示框,或者直接进行拦截(不通知用户)。这个场景我们也遇到过。

3、将Windbg附加到安装包进程上进行分析

       安装包中的安装线程发生堵塞卡死,不管是线程死锁引发的,还是安全软件拦截导致的,排查起来很简单,只要将Windbg附加到出问题的安装包进程上,输入~*kn命令,将安装包进程中所有线程的函数调用堆栈都打印出来,就可以确定了。

       为了看到详细的函数调用堆栈,需要取来相关模块的pdb符号文件,主要是exe安装包程序的pdb文件。如果要查看系统模块的具体接口,也可以设置系统库pdb在线下载路径:(下图中粗体部分就是系统pdb在线下载地址)

C:\Users\Administrator\Desktop\pdbdir;srv*f:\mss0616*http://msdl.microsoft.com/download/symbols

之前已经多次讲解如何找到对应时间点的pdb文件以及如何给Windbg配置pdb文件路径,此处就不再赘述了。关于pdb的详细说明(包含pdb所有的细节),可以查看我之前的文章:

【C++软件调试技术】什么是pdb文件?如何使用pdb文件?哪些工具需要使用pdb文件?icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/140742876       对于本问题,是安装线程发生了堵塞,我们首先去查看负责执行安装操作的业务线程的函数调用堆栈安装包会包含多个线程(相对于软件进程,安装包进程可能也就几个线程),如何确定哪个线程才是负责执行安装操作的业务线程呢?其实很简单,直接查看线程函数调用堆栈中调用的函数就能确定了。

       将Windbg附加到出问题的安装包进程上,输入~*kn命令将进程中所有线程的函数调用堆栈都打印出来然后根据需要,将相关模块的pdb文件找来,设置到Windbg中,然后再输入~*kn命令,重新将所有线程的函数调用堆栈打印出来,如下:

根据函数调用堆栈中调用的函数,一眼就能看出2号线程就是执行安装任务的业务线程。从调用堆栈可以看出,线程并没有发生死锁,所以大概率是系统中安装的安全防护软件拦截导致安装线程卡死的。

       继续查看安装线程中的函数,对照着源码得知:

当前安装线程正在向系统注册表中写入内容,可能是系统中安装的安全防护软件认为这个会危害系统安全,直接将写注册表的操作拦截了,导致安装线程卡住不返回了


        在这里,给大家重点推荐一下我的几个热门畅销专栏,欢迎订阅:(博客主页还有其他专栏,可以去查看)

专栏1:该精品技术专栏的订阅量已达到550多个,专栏中包含大量项目实战分析案例,有很强的实战参考价值,广受好评!专栏文章持续更新中,预计更新到200篇以上!欢迎订阅!)

C++软件调试与异常排查从入门到精通系列文章汇总icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/125529931

本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的项目问题实战分析实例(很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!

考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力!所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!

专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!

专栏2:(本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,订阅量已达200多个,专栏文章已经更新到460多篇,持续更新中...)

C/C++实战进阶(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_11931267.html

以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点(模版泛型编程、STL容器及算法函数的使用等)、数据结构与算法、C++11及以上新特性(不仅看开源代码会用到,日常编码中也会用到部分新特性,面试时也会涉及到)、常用C++开源库的介绍与使用、代码分享(调用系统API、使用开源库)、常用编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(排查软件异常的手段与方法、分析C++软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等)、设计模式、网络基础知识与网络问题分析进阶内容等。

专栏3:  

C++常用软件分析工具从入门到精通案例集锦汇总(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/131405795

常用的C++软件辅助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本专栏详细介绍如何使用这些工具去巧妙地分析和解决日常工作中遇到的问题,很有实战参考价值!

专栏4:   

VC++常用功能开发汇总(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/124272585

将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。

专栏5: 

C++ 软件开发从入门到精通(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_12695902.html

根据多年C++软件开发实践,详细地总结了C/C++软件开发相关技术实现细节,分享了大量的实战案例,很有实战参考价值。


4、在Windbg中查看相关变量的值,并设置断点进行动态调试

       询问同事得知,其电脑上只安装了腾讯电脑管家,没有安装其他的安全软件,并且他已经将腾讯电脑管家退出了,但重新安装时还是卡在最后那一点进度上,始终没完成。

最开始同事反馈这个问题时,我们第一反应可能是安全软件拦截导致的,让其将安全软件退出,再重新安装,看看是否还有问题。

4.1、在Windbg中查看相关变量的值 

       这就奇怪了,腾讯电脑管家已经退出了,为啥还有问题呢?于是尝试去看函数调用堆栈中相关变量的值,看看是否在写注册表调用接口时传入了异常的参数值。只要点击堆栈前面的序号超链接,就可以查看当前函数中相关变量的值,点击序号03,果然看到了一个异常值:

这个存放字符串的变量居然显示乱码!这个变量值是主调函数传入的,于是查看C++源码,主调函数传入的是常量字符串:

为啥到被调用函数中就变成乱码呢?太奇怪了!

       在Windbg中查看相关变量的值,可能是排查问题的关键线索我之前写过两篇项目实战排查案例的文章,可以查看:

通过查看Windbg中变量值去定位C++软件异常问题icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/125731044通过查看Windbg中变量值去定位C++软件异常的又一典型案例分享icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/125793532

4.2、在Windbg中使用bp命令设置断点进行动态调试

       为了搞清楚这个问题,想到可以重新运行安装包,将Windbg附加到安装包进程上,然后在问题函数的入口处设置断点,看看在函数入口处传入的参数值是否正常。 

       将安装包程序重新启动后,先不要点击下一步,先将Windbg附加到进程上,然后将pdb设置到Windbg中。然后再使用bp命令设置好断点,然后再点击下一步,让安装包开始安装,然后等待执行到设置断点的函数命中断点,然后就可以查看函数入口处传入的参数变量的值了。

       如何在Windbg中动态设置断点呢?其实很简单,使用bp命令即可,该命令的具体格式为:bp 模块名(不带后缀名)!函数名+相对函数的偏移地址,我们想在函数的入口处设置断点,直接使用函数名就可以了,不需要加上偏移地址了。

       我们的安装包程序名称是QyLink_V9.0.0.2.0.20241025.exe,于是打断点的命令可以构建为:

bp QyLink_V9.0.0.2.0.20241025!CProcessLogic::SetUp

此处注意,因为使用到了函数符号,必须先将pdb文件加载进Windbg中,否则Windbg无法识别函数名,断点会设置失败。

       执行上述bp命令后,居然提示断点设置失败:

这就有点奇怪了!提示找不到QyLink_V9.0.0.2.0.20241025模块,安装包exe程序名称就是QyLink_V9.0.0.2.0.20241025.exe啊!

        于是查看使用~*kn打印出来的堆栈中显示的模块,果然不是exe名称了,做了一些改动:

使用lm vm QyLink_V9.0.0.2.0.20241025*,查看QyLink_V9.0.0.2.0.20241025.exe模块的信息也看到了模块名称被改编了:

这点以前没遇到过,居然会改编模块名称,可能是模块名称太长的缘故吧!下次在遇到这类问题,就知道是改编引起的了。

       然后将bp命令修改成bp QyLink_V9_0_0_2_0_20241025!CProcessLogic::SetUp,然后执行该命令,断点就设置成功了。可以执行bl命令,查看当前都设置了哪些断点:

关于查看Windbg命令的详细说明,可以在菜单栏中点击Help->Index,打开Windbg的chm格式的帮助文档:

输入要查看的命令即可。

       断点设置好后,回到安装包的界面,点击下一步,开始安装。当执行到设置断点的CProcessLogic::SetUp函数时,命中了断点,此时输入kn命令查看函数调用堆栈,然后点击堆栈前面的序号,就可以查看CProcessLogic::SetUp函数入口处的相关变量的值了。看到函数入口处传入的变量值是正常的:

为啥运行函数中的若干行代码后,变量值就不正常了呢?最后怀疑可能是腾讯电脑管家安全防护模块拦截搞的鬼!

       关于何时使用Windbg静态分析dump文件、何时使用Windbg动态调试目标进程、以及静态分析与动态调试的一般步骤,可以查看我之前写的文章:

何时使用Windbg静态分析?何时使用Windbg动态调试?icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/131806819使用Windbg分析dump文件排查C++软件异常的一般步骤与要点分享icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/142970834使用Windbg调试目标进程的一般步骤详解icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/135484906

5、腾讯电脑管家已经退出,但其实时防护服务还在后台运行,仍然会拦截安装包的注册表操作

       到目前为止,还是没法确定到底是什么原因引起的。怀疑是安全软件拦截导致的,但电脑上唯一安装的安全软件腾讯电脑管家已经退出了,应该不会存在拦截问题了,但重新安装包去安装,问题还是依旧存在。 

       后来突然想到,虽然安全软件已经退出了,但安全软件的一些实时防护服务模块一直还在后台运行,以前我们用360时经常看到360都退出了,进程列表中还是能看到360的部分实时防护模块在运行。查看任务管理器,果然看到了腾讯电脑管家的实时防护服务模块QQPCRTP.exe仍然在后台运行

这个QQPCRTP.exe名称中的RTP,应该是Run-Time Protect(实时保护)的缩写)。到腾讯电脑管家的安装目录中找到QQPCRTP.exe,右键点击该文件,查看文件的属性:

该文件确实是腾讯电脑管家的实时防护服务模块,即便腾讯电脑管家退出了,这个实时防护模块还在后台运行。

       那现在就怀疑这些仍在运行的实时防护模块在拦截,但这些实时防护模块运行的权限比较高,没法在任务管理器中强行终止这些模块。后来不得已,为了验证是否是腾讯电脑管家拦截的,因为实时防护模块无法终止,那我们就直接将腾讯电脑管家卸载掉,卸载时电脑管家会自动将实时防护模块终止的。卸载后,重新运行安装包进行安装,就能正常完成安装了,果然是腾讯电脑管家捣的鬼,即便将腾讯电脑管家退出了,其实时防护模块还在运行,仍然对安装包写注册表的操作进行了拦截!

6、可以到腾讯电脑管家中查看拦截记录,可以尝试去关闭掉腾讯电脑管家对安装包程序的拦截操作

           如果腾讯电脑管家开着,可能会弹出如下的提示框:

让用户选择是否要阻止程序当前的操作。

       问题排查出来后,想想也许不用卸载腾讯电脑管家,可以尝试到腾讯电脑管家中查看有没有拦截记录,然后取消拦截也许就能解决问题了。具体找到拦截记录的方法是,先在主界面中,点击右侧的“权限管理”:

在弹出的窗口中,点击左侧的“软件安装提示”,然后点击窗口左下角的“自动拦截/允许名单”:

然后在弹出的窗口中可能能看到拦截记录:

7、让软件“绕过”360安全卫士或金山毒霸的拦截

        如果机器上安装了360安全卫士、金山毒霸等安全防护软件,可能也会遇到类似的拦截操作,但360安全卫士与金山毒霸都提供了软件认证检测平台,在发布软件版本之前可以将软件的安装包先提交到这些认证平台上检测,检测通过后360安全卫士、金山毒霸就不会拦截改版本的软件了。目前腾讯电脑管家还没有提供这种开放的软件认证检测平台。

软件认证检测平台会在后台对安装包程序本身以及安装安装包释放出来的软件文件进行详细地安全检测与分析,确保程序中没有威胁安全的代码行为,然后针对当前安装包生成特征码,后面就不会对安装包程序以及安装后的软件进行拦截了!

       关于360和金山毒霸拦截的实例以及如何跳过它们的拦截,可以查看我之前写的文章:

 如何让我们的软件跳过360和金山毒霸的“随意拦截”?icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/120682579

7.1、360安全卫士的软件认证检测平台

       360安全卫士的软件认证检测平台,称为360软件开放平台,地址为:https://open.soft.360.cn/

       目前使用360安全卫士等安全软件的用户比较多,所以一般我们会将软件的安装包提交到360软件认证检测平台上做检测,减少360安全卫士对安装包以及安装后的软件的拦截。

7.2、金山毒霸的软件认证检测平台 

        金山毒霸的软件认证检测平台,称为金山软件认证平台,地址为:http://rz.ijinshan.com/

       使用金山毒霸的用户好像不太多,是否要将软件安装包提交到金山毒霸的软件认证检测平台做检测,可以根据需要去决定。

8、最后

       本文中的安装包被安全防护软件拦截导致线程堵塞的问题,排查起来不难,但涉及到的点比较多,比如在Windbg中使用~*kn查看安装包进程中所有线程的函数调用堆栈在Windbg中查看相关变量的值在Windbg中设置断点进行动态调试(包括在Windbg中使用bp命令设置断点进行调试)腾讯电脑管家虽然退出了但实时防护模块仍然在后台运行等,有一定的实战参考价值!

在Windbg中设置断点进行调试,在日常工作中有个巧妙的用法,比如有的同事有时可能会忘记登录我们软件的密码(非软件的开发人员,没法直接调试代码),可以将软件启动启动,先不要发起登录,然后将Windbg附加到软件进程上,在发起登录的接口中设置断点(该接口中传入的密码是明文的),然后在软件中发起登录,然后命中该断点,直接查看函数中局部变量的值就可以查看到登录密码了!

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

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

相关文章

一键直达Windows11精简版下载地址:附快速安装教程!

许多用户想知道Windows11精简版下载地址在哪里?这里系统之家小编将给大家分享最新的Windows11精简版系统下载地址,方便大家下载与安装。该版本系统删除大量不必要的组件和功能,让系统运作速度变得更快更流畅,但没有过度精简&#…

Mesh网格

Mesh(网格) 定义:Mesh 是一个包含顶点、三角形、顶点法线、UV坐标、颜色和骨骼权重等数据的对象。它定义了3D模型的几何形状。 功能: 顶点(Vertices):构成3D模型的点。 三角形(Triangles)&…

【机器学习】28. 强化学习(Bellman, Q-learning, DQN, 优先级经验回放)

强化学习 定义强化学习的核心要素马尔可夫决策过程价值函数Bellman 方程Q Learning深度Q学习算法 (DQN)DQN 的核心思想DQN 的工作流程经验回放:(随机抽样)目标网络:损失函数 优先级经验回放(Pri…

大数据-217 Prometheus 安装配置 启动服务 监控服务

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

利用RANSAC算法拟合平面并生成包围框的点云处理方法,点云聚类、质心坐标、倾斜角度、点云最小外接矩形

该代码用于分析和处理点云数据,通过对点云数据进行裁剪、平面拟合和生成包围框来提取特定区域的特征并发布结果。主要使用了RANSAC算法来识别并拟合平面,从而提取平面的法向量,接着根据该平面计算出该区域的最小矩形包围框(Boundi…

算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝

大佬们好呀,这一次讲解的是二叉树的深度搜索,大佬们请阅 1.前言 ⼆叉树中的深搜(介绍) 深度优先遍历(DFS,全称为DepthFirstTraversal),是我们树或者图这样的数据结构中常⽤的⼀种…

深入解析DHCP带来了什么功能,服务器回应到底是用广播还是单播呢?

前言 不知道大家在看到这个图的时候第一时间想到的是什么,【好复杂】【看不懂】【终端数好多】,这里不看整体的结构怎么样,来看看终端数量都非常的多,终端要与网络中进行通信,势必需要IP地址,从最开始学习到…

<项目代码>YOLOv8 棉花识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

知乎日报前三周总结

目录 前言 首页 网络请求 上拉加载 详情页 加载WebView 左右滑动 主页与详情页同步更新 总结 前言 在这几周进行了知乎日报的仿写,这篇博客来总结一下前三周仿写的内容 首页 首页的界面如图所示,其实就是一个导航栏和一个数据视图组成的&#…

小白快速上手 labelimg:新手图像标注详解教程

前言 本教程主要面向初次使用 labelimg 的新手,详细介绍了如何在 Windows 上通过 Anaconda 创建和配置环境,并使用 labelimg 进行图像标注。 1. 准备工作 在开始本教程之前,确保已经安装了 Anaconda。可以参考我之前的教程了解 Anaconda 的…

【算法】【优选算法】二分查找算法(上)

目录 一、二分查找简介1.1 朴素二分模板1.2 查找区间左端点模版1.3 查找区间右端点模版 二、leetcode 704.⼆分查找2.1 二分查找2.2 暴力枚举 三、Leetcode 34.在排序数组中查找元素的第⼀个和最后⼀个位置3.1 二分查找3.2 暴力枚举 四、35.搜索插⼊位置4.1 二分查找4.2 暴力枚…

自己构建ARM平台DM8镜像

??? 为什么不使用官方提供的docker版本,测试有问题,分析函数不能使用,报错。 自己构建ARM平台的dm8镜像,参考 https://gitee.com/xlongfu/dm-docker/tree/master,发现一些问题 首先…

Linux之实战命令73:at应用实例(一百零七)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

万字长文解读【深度学习面试——训练(DeepSpeed、Accelerate)、优化(蒸馏、剪枝、量化)、部署细节】

🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化深度学习——权重初始化、评估指标、梯度消失和梯度爆炸深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总万字长文解读…

C++ | Leetcode C++题解之第554题砖墙

题目&#xff1a; 题解&#xff1a; class Solution { public:int leastBricks(vector<vector<int>>& wall) {unordered_map<int, int> cnt;for (auto& widths : wall) {int n widths.size();int sum 0;for (int i 0; i < n - 1; i) {sum wi…

DDei在线设计器V1.2.42版发布

V1.2.42版 新特性&#xff1a; 1.快捷编辑框可以映射到主控件的多个属性上&#xff0c;从而实现快速编辑。 2.跟随图形的支持范围增加&#xff0c;从仅支持线控件到支持所有控件 2.新增控件双击回调函数EVENT_CONTROL_DBL_CLICK&#xff0c;可以用于覆盖默认的快速编辑逻辑…

大数据的实时处理:工具和最佳实践

在当今的数字世界中&#xff0c;数据以前所未有的速度从无数来源生成&#xff0c;包括社交媒体、物联网设备、电子商务平台等。随着组织认识到这些数据的潜在价值&#xff0c;他们越来越多地转向实时处理&#xff0c;以获得即时、可操作的见解。但是&#xff0c;实时处理大数据…

【51单片机】蜂鸣器演奏音乐——小星星天空之城

学习使用的开发板&#xff1a;STC89C52RC/LE52RC 编程软件&#xff1a;Keil5 烧录软件&#xff1a;stc-isp 开发板实图&#xff1a; 文章目录 蜂鸣器按键发声无源蜂鸣器演奏音乐简单乐理小星星天空之城 蜂鸣器 蜂鸣器在开发板的位置如下&#xff1a; 蜂鸣器是一种将电信号转…

【含开题报告+文档+源码】高校校园二手交易平台的设计与实现

开题报告 随着互联网的快速发展&#xff0c;电子商务成为了现代化社会中不可或缺的一部分。线上交易平台的兴起&#xff0c;为商家和消费者创造了更多的交易机会和便利。然而&#xff0c;传统的电商平台通常由一家中央机构管理和控制&#xff0c;对商家和消费者的自由度有一定…