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

2022年6月和7月的工作经历

6月

3D打标软件


3D打标软件,要求在Open3d上加几个2D文字。大致有如下几个方案:
依葫芦画瓢,但O3DVisualizer派生于gui::Window,我的程序派生于Visualizer。工作量不小。
利用OpenGL输出文字,Baidu的两种方法一个编译不过,一个根本就没效果。
利用Window API输出文字,本机上没问题。有两台机器显示高几率丢失。原因位置,可能是本机是集成显卡,那两台是独立显卡。
蹉跎一天多,最终利用Window API创建了几个Static显示文字。


同一个函数多线程执行时间


函数结束时间减去开始时间就是执行时间,如果是多线程,必须同一线程同一函数的结束时间减去同一线程同一函数的开始时间。手工计算太麻烦,于是写了个小工具。试用了一天发现,除了忘记限制同一线程,无其它问题。修正后,就好了。工具修正后,就不会出错了,手动计算这次没错不代表下次不出错。


7月


1.try


项目属性,加上 /EHa 后,可以try 到 catch (...) 我所知的所有异常,建议__try,这样可以得到崩溃时的堆栈。我实验了60种组合,5种C#调用方式(主线程、委托、线程、任务、线程池)、3种崩溃方式(本线程崩溃、AfxBeginThread崩溃、std::thread线程崩溃)、4类常见异常:
一,int* p = NULL;
*p = 3;
二,std::string str(NULL);
三, class Polymorphic { virtual void member() {} };
Polymorphic* p = NULL;
typeid(*p);
四,throw(1);
事后补充:CreateThread 也可以。


2.阴沟翻船


周五自己封装托管C++库,在用户的机器上启动不了。demo也是如此,情况如下:
一,托管C++和C# .netframe4.5,C++ 工具集v142。
二,传统c++的exe和dll都可以正常运行,C#的exe和C#的dll都是可以正常运行。
三,exe改成托管,也可运行。
用depend看,发现托管C++库链接了Debug版的运行库,改成MDd就好了。
猜测:
增加配置v142时复制了Debug而不是Release。


3.向日葵与VM冲突


 这两天发现VM不好用了,顶部悬浮工具栏不出来,alt+tab 多次才能到主机,无法从虚拟机复制文件到主机。可惨了,重启虚拟机都没用,只能重启主机。后来发现切换到主机,把向日葵的远程登陆关掉就好了,虽然还是麻烦,但是好多了。ToDesk似乎和VM不冲突,以前一直用todesk。发到微博后,收到ToDesk官方微博的回复。


4.死锁


和徐永昌谈到死锁,于是完成CCriticalGroup类以避免死锁,此类已经进入公司SVN库。线程一先后锁ab,线程二先后锁bc,线程三先后锁ca。运气不好的时候,3个线程对第一个锁加锁成功,无法对第二个锁加锁,因为已经被其它线程锁定了。
此类功能:
一,如果你按abc的顺序初始化CCriticalGroup类,无论你锁ab,还是锁ba,都是先锁a,再所b。
二,不需要自己维护临界区。
此类声明:

测试用例:

脉脉上有高人指点,std::scoped_lock std::lock std::lock_guard 可以解决死锁。VS2013、VS2015、VS2017不支持,VS2019默认不支持,改成C++17或C++20就支持了。

5.std::thread线程不触发SetUnhandledExceptionFilter 


发现std::thread启动的线程崩溃,不触发 SetUnhandledExceptionFilter ,没机会生成dump.txt和转储文件。一直手动__try,今天忙中抽闲研究一下发现std::thread的线程函数声明了noexcept。


6.系统卡死


用户那有部分电脑卡顿,我在测试平台试验了,出现了两次。症状如下:
一,整个操作系统无响应,鼠标、键盘输入无效。
二,windows任务管理器不刷新。
三,系统时间不更新。
四,鼠标上的灯是亮的。拔掉鼠标,再插上,鼠标的灯不亮。利用机箱上“重启键”重启后,鼠标的灯亮了。
无响应时:CPU不到20%,内存不到50%,两块硬盘0%,1%,网卡不到100K。
和perfmon的记录一致。
我们的程序是普通程序,Win10用户态程序有可能把操作系统卡死么?会不会是硬件驱动的问题。
和此产品的主程沟通,他没用使用hook、系统回调、系统钩子之类。但不排除其他程序员无意中使用了,他入职前就已经有这套程序了。
0环就只有一个进程了system,这个进程有近200个线程,我们的工控机是8核,就算回调、钩子有问题也只会卡死少数几个线程啊。应该会变卡,但不会卡死。魏家瑜说驱动层不能同时执行,一个回调卡死整个系统。


7.用户态的程序能卡死操作系统么?


昨天怀疑系统的回调函数会让系统(多核)变卡,但不会完全卡死。今天在Win10(4核),C#2013实验了一下。
结果:启动20个TestListenDir.exe,修改文件、重命名文件 都不会让系统变卡,更不会卡死。新增加文件,系统变卡,CPU占用100%,TestListenDir.exe每个占用CPU近5%。系统时间正常更新。

using System.IO;
using System.Windows.Forms;

namespace TestListenDir
{
    public partial class Form1 : Form
    {
        class WatcherFTPDir
        {
            public void MonitorDirectory(string path)
            {
                try
                {
                    FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();
                    fileSystemWatcher.IncludeSubdirectories = true;
                    fileSystemWatcher.Path = path;
                    fileSystemWatcher.Created += FileSystemWatcher_Created;
                    fileSystemWatcher.Changed += FileSystemWatcher_Changed;
                    fileSystemWatcher.Renamed += FileSystemWatcher_Renamed;
                    fileSystemWatcher.EnableRaisingEvents = true;                    
                }
                catch
                {
                    
                }
            }

            private void FileSystemWatcher_Created(object sender, FileSystemEventArgs e)
            {
                long iIndex = 0;
                //大约需要7秒
                for (long i = 0; i < (long)10000*1000*1000; i++)
               {
                   iIndex = i;
               }
                MessageBox.Show(iIndex.ToString());
            }

            private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
            {
                MessageBox.Show("修改文件:" + e.FullPath);
            }

            private void FileSystemWatcher_Renamed(object sender, FileSystemEventArgs e)
            {
                System.Threading.Thread.Sleep(1000 * 100);
            }          
        }

        WatcherFTPDir watch = new WatcherFTPDir();
        public Form1()
        {
            InitializeComponent();
            watch.MonitorDirectory("c:\\a");
        }
    }
}


8.程序崩溃,Windows事件查看器看不到


本公司的某产品,在我、客户那可以正常生成自定义异常文件dump.txt,在Windows事件查看器也可以看到崩溃信息。在主程序员那两者皆无。操作系统都是Win10。问题暂未解决。自动覆盖旧日志开启了,所以不是磁盘空间满了。弄了个简单demo,崩溃后,windows事件查看器看得到。


9.Stack buffer overflow


同事的程序崩溃了,我的模块并没生成dump.txt。幸运的是,可以在客户那100%重现,同事自己的机器不重现。只好用WinDbg调试,可以定位崩溃函数名和函数的偏移量和错误类型。第二次崩溃崩溃前,把程序界面尽量往右拉,给wdg留出位置。发现windbg显示了崩溃行,只是被程序界面挡住了。错误类型是:Stack buffer overflow。此类错误最典型的例子:
char  c[1];
strcpy_s(c,"abc1111111111111111111111111111111222");
根据这两条信息,同事找到缺陷,OpenCV版本不对,Mat 的析构函数会崩溃。


10.续


之前就知道 栈溢出(Stack overflow),无法触发UnHand,昨天发现栈缓存溢出(Stack buffer overflow)也无法触发UnHand。今天实验了一下,无论是否/EHa ,这两种溢出都不会触发try __try。 Windows事件查看器会有记录。

相关文章:

2022年6月和7月的工作经历

6月 3D打标软件 3D打标软件&#xff0c;要求在Open3d上加几个2D文字。大致有如下几个方案&#xff1a; 依葫芦画瓢&#xff0c;但O3DVisualizer派生于gui::Window&#xff0c;我的程序派生于Visualizer。工作量不小。 利用OpenGL输出文字&#xff0c;Baidu的两种方法一个编…...

【图像处理】SIFT角点特征提取原理

一、说明 提起在OpenCV中的特征点提取&#xff0c;可以列出Harris&#xff0c;可以使用SIFT算法或SURF算法来检测图像中的角特征点。本篇围绕sift的特征点提取&#xff0c;只是管中窥豹&#xff0c;而更多的特征点算法有&#xff1a; Harris & Stephens / Shi–Tomasi 角点…...

flutter开发实战-应用更新apk下载、安装apk、启动应用实现

flutter开发实战-应用更新apk下载、安装apk、启动应用实现 在开发过程中&#xff0c;经常遇到需要更新下载新版本的apk文件&#xff0c;之后进行应用更新apk下载、安装apk、启动应用。我们在flutter工程中实现下载apk&#xff0c;判断当前版本与需要更新安装的版本进行比对判断…...

DispatcherServlet初始化之Spring容器创建1.0

一、前言 在SpringMVC框架中&#xff0c;DispatcherServlet扮演着非常重要的角色&#xff0c;它负责接收所有的HTTP请求并将其分发给相应的处理器。在DispatcherServlet的初始化过程中&#xff0c;会创建一个Spring容器来管理应用程序中的Bean。 二、步骤 1、加载配置文件&a…...

CSS的基础

CSS美化HTML&#xff0c;布局网页 CSS最大的价值&#xff1a;由HTML专注去做结构呈现&#xff0c;样式给CSS&#xff0c;结构&#xff08;HTML)与样式&#xff08;CSS&#xff09;相分离 CSS主要由选择器以及一条或多条声明 在<head></head>中实现CSS在<body…...

mathtype如何嵌入到word中?详细mathtype安装步骤教程

mathtype是一款功能特别强大的数学方式编辑软件&#xff0c;为用户提供各种强大的数学公式符号帮助用户进行计算&#xff0c;并且速度很快。有小伙伴知道mathtype如何嵌入到word中吗&#xff0c;这里小编就给大家详细介绍一下mathtype嵌入到word中的方法&#xff0c;有需要的小…...

云安全之访问控制的常见攻击及防御

访问控制攻击概述 访问控制漏洞即应用程序允许攻击者执行或者访问某种攻击者不具备相应权限的功能或资源。 常见的访问控制可以分为垂直访问控制、水平访问控制及多阶段访问控制 (上下文相关访问控制)&#xff0c;与其相应的访问控制漏洞为也垂直越权漏洞(普通用户可以访问或…...

Java编程技巧:跨域

目录 1、跨域概念2、后端CORS&#xff08;跨域资源共享&#xff09;配置原理3、既然请求跨域了&#xff0c;那么请求到底发出去没有&#xff1f;4、通过后端CORS&#xff08;跨域资源共享&#xff09;配置解决跨域问题代码4.1、SpringBoot&#xff08;FilterRegistrationBean&a…...

react create-react-app 配置less

环境信息&#xff1a; create-react-app:v5 react:18.2.0 node:18.16.0 如果你不必须使用 less 建议直接使用scss。 因为less配置会遇到很多问题。 配置less过程&#xff1a; 如果你只需要 sass的话&#xff0c;就可以直接使用sass。因为默认配置了scss。 npm、yarn、cnpm、…...

树的表示——孩子兄弟表示法

从图中可以看出&#xff0c;树的每个结点&#xff0c;都有不确定的指向他们的孩子的节点&#xff0c;如果我们定义这样一个结构体来便是数的结构的话&#xff1a; struct TreeNode { int val; struct TreeNodep1; struct TreeNodep1; … }; 是不能够表示一棵树的&#xff0c;因…...

Windows11安装MySQL8.1

安装过程中遇到任何问题均可以参考(这个博客只是单纯升级个版本和简化流程) Windows安装MySQL8教程-CSDN博客 到官网下载mysql8数据库软件 MySQL :: Download MySQL Community Server 下载完后,解压到你需要安装的文件夹 其中的配置文件内容了如下 [mysqld]# 设置3306端口po…...

Linux编程——经典链表list_head

1. 关于list_head struct list_head是Linux内核定义的双向链表&#xff0c;包含一个指向前驱节点和后继节点的指针的结构体。其定义如下&#xff1a; struct list_head {struct list_head *next, *prev; //双向链表&#xff0c;指向节点的指针 };1.1 链表的定义和初始化 有两…...

基于51单片机NEC协议红外遥控发送接收仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

基于51单片机NEC协议红外遥控发送接收仿真设计 讲解视频1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机NEC协议红外遥控发送接收仿真设计 51单片机红外发送接收仿真设计( proteus仿真程序原理图报告讲解视频…...

Jmeter分布式压力测试

目录 1、场景 2、原理 3、注意事项 4、slave配置 5、master配置 6、脚本执行 1、场景 在做性能测试时&#xff0c;单台机器进行压测可能达不到预期结果。主要原因是单台机器压到一定程度会出现瓶颈。也有可能单机网卡跟不上造成结果偏差较大。 例如4C8G的window server机…...

Rust :mod.rs和lib.rs中use的作用

一、mod.rs和lib.rs mod.rs往往是把同一目录下的n个rs文件综合在一起的有效方式&#xff1b; lib.rs是一个库或子库层次综合在一起的有效方式&#xff1b; 下面举个实例来说明。生成一个rusttoc本地库&#xff08;由cargo new rusttoc --lib所生成&#xff09;&#xff0c;目录…...

ISP图像信号处理——平场校正介绍以及C++实现

参考文章1&#xff1a;http://t.csdn.cn/h8TBy 参考文章2&#xff1a;http://t.csdn.cn/6nmsT 参考网址3&#xff1a;opencv平场定标 - CSDN文库 平场校正一般先用FPN(Fixed Pattern Noise)固定图像噪声校正,即暗场校正&#xff1b;再用PRNU(Photo Response Non Uniformity)…...

【深入了解Java String类】

目录 String类 常用方法 字符串的不可变性 String的内存分析 StringBuilder类 解释可变和不可变字符串 常用方法 面试题&#xff1a;String&#xff0c;StringBuilder&#xff0c;StringBuffer之间的区别和联系 String类的OJ练习 String类 【1】直接使用&#xff0c…...

基于SpringBoot的知识管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户管理 文章分类 资料分类 文章信息 论坛交流 资料下载 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个…...

Pytorch基础:Tensor的reshape方法

在Pytorch中&#xff0c;reshape是Tensor的一个重要方法&#xff0c;它与Numpy中的reshape类似&#xff0c;用于返回一个改变了形状但数据和数据顺序和原来一致的新Tensor对象。注意&#xff1a;此时返回的数据对象并不一定是新的&#xff0c;这取决于应用此方法的Tensor是否是…...

【数据库——MySQL】(13)过程式对象程序设计——存储函数、错误处理以及事务管理

目录 1. 存储函数2. 存储函数的应用3. 错误处理4. 抛出异常5. 事务处理6. 事务隔离级7. 应用实例参考书籍 1. 存储函数 要 创建 存储函数&#xff0c;需要用到 CREATE 语句&#xff1a; CREATE FUNCTION 存储函数名([参数名 类型, ...])RETURNS 类型[存储函数体]注意&#xff1…...

Spring Boot的魔法:构建高性能Java应用

文章目录 Spring Boot&#xff1a;简化Java开发Spring Boot的性能优势1. 内嵌服务器2. 自动配置3. 起步依赖4. 缓存和优化5. 异步处理 实际示例&#xff1a;构建高性能的RESTful API总结 &#x1f389;欢迎来到架构设计专栏~Spring Boot的魔法&#xff1a;构建高性能Java应用 ☆…...

如何做好测试?(七)兼容性测试 (Compatibility Testing, CT)

1. 兼容性测试介绍 兼容性测试 (Compatibility Testing, CT)是一种软件测试方法&#xff0c;旨在验证应用程序在不同操作系统、浏览器、设备和网络环境下的正确运行和一致性。对于网上购物系统来说&#xff0c;兼容性测试非常重要&#xff0c;因为用户可能使用各种不同的设备和…...

经典循环神经网络(一)RNN及其在歌词数据集上的应用

经典循环神经网络(一)RNN及其在歌词数据集上的应用 1 RNN概述 在深度学习兴起之前&#xff0c;NLP领域一直是统计模型的天下&#xff0c;例如词对齐算法GIZA&#xff0c;统计机器翻译开源框架MOSES等等。在语言模型方向&#xff0c;n-gram是当时最为流行的语言模型方法。n-gr…...

docker+mysql+flask+redis+vue3+uwsgi+docker部署

首先拉取mysql的镜像&#xff0c;这里用的mysql5.7.6 docker pull mysql:5.7.6 镜像拉取完成后启动&#xff1a; docker run --name my-mysql -d -p 3306:3306 -v /usr/local/my-mysql/conf:/etc/mysql/conf.d -v /usr/local/my-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PA…...

Spring boot接收zip包并获取其中excel文件的方法

1、问题 工作中遇到一个需求&#xff0c;接收一个zip包&#xff0c;读取其中的excel文件并处理&#xff0c;减少用户多次选择目录和文件的痛点&#xff0c;该zip包包含多级目录 2、依赖 需要用到apache的Workbook类来操作Excel&#xff0c;引入以下依赖 <dependency>&l…...

Ubuntu镜像源cn.arichinve.ubuntu.com不可用原因分析和解决

文章目录 Ubuntu查看系统版本Ubuntu更新系统不能更新Ubuntu查看APT更新源配置cn.archive.ubuntu.com已经自动跳转到清华镜像站Ubuntu变更镜像源地址备份原文件批量在VIM中变更 Ubuntu国内镜像站推荐推荐阅读 今天想要在Ubuntu环境下搭建一个测试环境&#xff0c;进入Ubuntu系统…...

Java基础面试,String,StringBuffer,StringBuilder区别以及使用场景

简单的几句 String是final修饰的&#xff0c;不可变&#xff0c;每次操作都会产生新的对象。StringBuffer和StringBuilder都是在原对象上进行操作StringBuffer是线程安全的&#xff0c;StringBuilder是线程不安全的。StringBuffer方法是被synchronized修饰的 所以在性能方面大…...

基于SpringBoot的高校学科竞赛平台

目录 前言 一、技术栈 二、系统功能介绍 竞赛题库管理 竞赛信息管理 晋级名单管理 往年成绩管理 参赛申请管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步…...

excel如何让线条消失,直接设置网格即可,碰到不方便的地方优先百度,再采取蛮干

怎么将excel表格中的隐形线条去掉...

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

短视频seo源码&#xff0c;短视频seo矩阵系统底层框架上支持了从ai视频混剪&#xff0c;视频批量原创产出&#xff0c;云存储批量视频制作&#xff0c;账号矩阵&#xff0c;视频一键分发&#xff0c;站内实现关键词、短视频批量搜索排名&#xff0c;数据统计分类多功能细节深度…...

网站地址推荐/国外网站怎么推广

bash的配置文件主要分为两类&#xff0c;1.profile类&#xff0c;2.bashrc类。其中profile类主要为交互式的shell提供配置文件&#xff0c;bashrc类主要为非交互式的shell提供配置文件。下面首先介绍一下哪些是交互式shell&#xff0c;哪些是非交互式shell。 交互式shell 1.直接…...

阳春市建设局网站/web网页制作成品

Employee 表包含所有员工信息&#xff0c;每个员工有其对应的 Id, salary 和 department Id 。 --------------------------------- | Id | Name | Salary | DepartmentId | --------------------------------- | 1 | Joe | 70000 | 1 | | 2 | Henry | 80000…...

婚礼婚庆网站建设需求分析/百度店铺

错误代码&#xff1a;SELECT列表1055表达式&#xff03;1是不是在GROUP BY子句中包含非聚合列这并不功能依赖于GROUP BY子句中的列; 这是不符合的SQL_MODE ONLY_FULL_GROUP_BY 我试图查询一个复杂的SQL查询与联接&#xff0c;团体等&#xff0c;并升级MySQL后组停止工作。 为了…...

私服网站开发/平台网站开发公司

最简单&#xff0c;但最不安全的配置 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods *; add_header Access-Control-Allow-Headers *;使用 always 参数 在某些情况下&#xff0c;Nginx 没有返回我们设置的头部。比如在 404 时&#xff0…...

工信部网站备案/口碑营销的好处

点击上方“iOS开发”&#xff0c;选择“置顶公众号”关键时刻&#xff0c;第一时间送达&#xff01;前言在开篇之前思考几个问题&#xff1f;1、继承最大的缺点是什么&#xff1f;2、为什么说耦合也可能是一种需求&#xff1f;3、有哪些场景不适合使用继承&#xff1f;4、继承本…...

成都网站建设网站制作公司/百家号seo

Example GetIfTable function DWORD GetIfTable( _Out_ PMIB_IFTABLE pIfTable, _Inout_ PULONG pdwSize, _In_ BOOL bOrder); GetIpAddrTable&#xff1a; 允许应用程序检索的 IP 地址信息 MIB_IFROW structure 关于接口类型&#xff1a;在统计网卡流量时&#…...