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事件查看器会有记录。

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

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

相关文章

AI编程助手 Amazon CodeWhisperer 全面解析与实践

目录 引言Amazon CodeWhisperer简介智能编程助手智能代码建议代码自动补全 提升代码质量代码质量提升安全性检测 支持多平台多语言 用户体验和系统兼容性用户体验文档和学习资源个性化体验系统兼容性 功能全面性和代码质量功能全面性代码生成质量和代码安全性 CodeWhisperer的代…

在pycharm中弹出图后,需要关闭才会显示Process finished with exit code 0

在pycharm中弹出图后&#xff0c;需要关闭才会显示Process finished with exit code 0 在PyCharm中&#xff0c;当你运行一个Python程序并弹出一个图形窗口时&#xff0c;程序会等到图形窗口关闭后才会显示 “Process finished with exit code 0” 的消息。 这是 由于代码执行…

毛玻璃员工卡片悬停效果

效果展示 页面结构组成 通过效果展示图&#xff0c;我们可以看出页面布局比较常规&#xff0c;最核心的就是卡片&#xff0c;当鼠标没有悬停在卡片上时&#xff0c;文字和头像处于半透明状态&#xff0c;当鼠标悬停在卡片上是&#xff0c;底部会展示社交图标。 CSS 知识点 b…

AI大模型安装

1、https://blog.csdn.net/m0_63748493/article/details/131914092 环境安装 2、https://www.jianshu.com/p/728b4b7c3efd 3、安装显卡驱动 下载 https://blog.csdn.net/zataji/article/details/123104569 用bash 下载启动文档位置run 报错提示 https://blog.csdn.net/sunming…

1.物联网射频识别,RFID概念、组成、中间件、标准,全球物品编码——EPC码

1.RFID概念 RFID是Radio Frequency Identification的缩写&#xff0c;又称无线射频识别&#xff0c;是一种通信技术&#xff0c;可通过无线电讯号识别特定目标并读写相关数据&#xff0c;而无需与被识别物体建立机械或光学接触。 RFID&#xff08;Radio Frequency Identificati…

Qt扩展-QCustomPlot 简介及配置

QCustomPlot 简介及配置 一、概述二、安装教程三、帮助文档的集成 一、概述 QCustomPlot是一个用于绘图和数据可视化的Qt 控件。它没有进一步的依赖关系&#xff0c;并且有良好的文档记录。这个绘图库专注于制作好看的、发布质量的2D绘图、图形和图表&#xff0c;以及为实时可…

python dicttoxml模块简介

dicttoxml模块简介 官方文档 安装 pip install dicttoxml基本用法 # 方法一 导入库 import dicttoxml xml dicttoxml.dicttoxml(some_dict) # 方法二 导入dicttoxml()函数 form dicttoxml import dicttoxml xml dicttoxml(some_dict)dicttoxml 属性介绍 root False 创…

Leetcode39组合总和

代码&#xff1a; class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> res new ArrayList<>();List<Integer> curRes new ArrayList<>();Arrays.sort(candidates);…

11、iframe内联框架

11、iframe内联框架 iframe就是为了实现在一个网页中嵌套另外一个网页的效果 <iframe src"path" name"mainFrame"></iframe> <!-- src&#xff1a;引用页面地址 name&#xff1a;框架标识名&#xff0c;前面我们学习了超链接标签中target…

Spring IOC之AnnotationConfigApplicationContext

博主介绍:✌全网粉丝近5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus…

Andriod 简单控件

目录 一、文本显示1.1 设置文本内容1.2 设置文本大小1.3 设置文本颜色 二、视图基础2.1 设置视图宽高2.2 设置视图间距2.3 设置视图对齐方式 三、常用布局3.1 线性布局LinearLayout3.2 相对布局RelativeLayout3.3 网格布局GridLayout3.4 滚动视图ScrollView 四、按钮触控4.1 按…

VSCode 在部分 Linux 设备上终端和文本编辑器显示文本不正常的解决方法

部分Linux设备上运行VSCode时&#xff0c;发现文本编辑器的缩放不明显&#xff0c;终端字体间距过大等。 这里以Kali Linux为例&#xff0c;其他Linux发行版请选择对应的系统内置的等宽字体 我们依次打开 设置 -> 外观 -> 字体 这里我们可以发现&#xff0c;Kali Linux默…

Linux性能优化--性能工具-系统CPU

2.0.概述 本章概述了系统级的Linux性能工具。这些工具是你追踪性能问题时的第一道防线。它们能展示整个系统的性能情况和哪些部分表现不好。 1.理解系统级性能的基本指标&#xff0c;包括CPU的使用情况。 2.明白哪些工具可以检索这些系统级性能指标。 2.1CPU性能统计信息 为…

chrome extensions mv3通过content scripts注入/获取原网站的window数据

开发插件的都知道插件的content scripts和top window只共享Dom不共享window和其他数据&#xff0c;如果想拿挂载在window的数据还有点难度&#xff0c;下面会通过事件的方式传递cs和top window之间的数据写一个例子 代码 manifest.json 这里只搞了2个js&#xff0c;content.…

linux——进程间通信——命名管道

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——进程间通信——命名管道 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;命名管道是一种特殊的文件存放在文件系统中&#xff…

如何解决git clone http/https仓库失败(403错误)

本来不打算写这篇文章&#xff0c;但是后来又遇到这个问题忘了之前是怎么解决的了。 一般情况下&#xff0c;个人使用 GitHub 等平台时是使用 SSH 协议的&#xff0c;这样不光方便管理可访问用户&#xff0c;也保证了安全性。但是 GitHub 上仓库的 SSH 地址是要登陆才能看到&a…

【中秋国庆不断更】HarmonyOS对通知类消息的管理与发布通知(下)

一、发布进度条类型通知 进度条通知也是常见的通知类型&#xff0c;主要应用于文件下载、事务处理进度显示。HarmonyOS提供了进度条模板&#xff0c;发布通知应用设置好进度条模板的属性值&#xff0c;如模板名、模板数据&#xff0c;通过通知子系统发送到通知栏显示。 目前系统…

paddle2.3-基于联邦学习实现FedAVg算法-CNN

目录 1. 联邦学习介绍 2. 实验流程 3. 数据加载 4. 模型构建 5. 数据采样函数 6. 模型训练 1. 联邦学习介绍 联邦学习是一种分布式机器学习方法&#xff0c;中心节点为server&#xff08;服务器&#xff09;&#xff0c;各分支节点为本地的client&#xff08;设备&#…

自己动手写编译器:实现命令行模块

在前面一系列章节中&#xff0c;我们完成了词法解析的各种算法。包括解析正则表达式字符串&#xff0c;构建 NFA 状态就&#xff0c;从 NFA 转换为 DFA 状态机&#xff0c;最后实现状态机最小化&#xff0c;接下来我们注重词法解析模块的工程化实现&#xff0c;也就是我们将所有…

【信创】麒麟v10(arm)-mysql8-mongo-redis-oceanbase

Win10/Win11 借助qume模拟器安装arm64麒麟v10 前言 近两年的国产化进程一直在推进&#xff0c;基于arm架构的国产系统也在积极发展&#xff0c;这里记录一下基于麒麟v10arm版安装常见数据库的方案。 麒麟软件介绍: 银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中…