记一次 .NET 某光放测试系统 崩溃分析

news/2025/10/23 11:47:32/文章来源:https://www.cnblogs.com/huangxincheng/p/19160157

一:背景

1. 讲故事

微信好友里有位朋友找到我,说他部署在windows上的程序,用debug模式正常,但用 release 模式跑程序就崩溃,如果把程序切到 .NET6 的话又都正常,所以很迷茫,让我看看怎么回事,哈哈,这种问题直接抓dump分析就好了。

二:崩溃分析

1. 为什么会崩溃

分析过崩溃程序的朋友应该知道,不管是托管还是非托管崩溃,先用 !analyze -v 命令开路,简化输出如下:


0:000> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************CONTEXT:  (.ecxr)
rax=0000000000000004 rbx=000001e34b283ec0 rcx=0000000000000228
rdx=0000000000000000 rsi=000001e34ac2f4e0 rdi=000001e34ab58e70
rip=00007ff95ac53659 rsp=0000007735d7e1c0 rbp=0000007735d7e1e0r8=0000000000000000  r9=000001e3464ba1c0 r10=0000000000000228
r11=0000000000000228 r12=0000000000000000 r13=000001e34880eae8
r14=000001e34ab58e70 r15=0000000000000008
iopl=0         nv up di pl nz na pe nc
cs=0000  ss=0000  ds=0000  es=0000  fs=0000  gs=0000             efl=00000000
System_Private_CoreLib!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw+0x39:
00007ff9`5ac53659 cc              int     3
Resetting default scopeEXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ff95ac53659 (System_Private_CoreLib!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw+0x0000000000000039)ExceptionCode: e0434f4d (CLR exception)ExceptionFlags: 00000000
NumberParameters: 0
...

从卦中的 ExceptionCode: e0434f4d (CLR exception) 来看,这是一个经典的托管异常,既然是托管异常,这个问题就比较简单了,使用 !t 找下到底是哪一个托管线程抛的,输出如下:


0:000> !t
ThreadCount:      15
UnstartedThread:  0
BackgroundThread: 11
PendingThread:    0
DeadThread:       3
Hosted Runtime:   noLock  DBG   ID     OSID ThreadOBJ           State GC Mode     GC Alloc Context                  Domain           Count Apt Exception0    1     81d8 000001E3464BA1C0    a6028 Preemptive  000001E34ABA2340:000001E34ABA3D30 000001e347fc40b0 -00001 STA Prism.Ioc.ContainerResolutionException 000001e34a9866086    2     448c 000001E34803A440    2b228 Preemptive  000001E34A876980:000001E34A8784B0 000001e347fc40b0 -00001 MTA (Finalizer) ...

从卦中的 Prism.Ioc.ContainerResolutionException 来看,貌似是和 Prism 有关,接下来可以用 !pe 命令观察调用栈详情。


0:000> !pe
Exception object: 000001e34a986608
Exception type:   Prism.Ioc.ContainerResolutionException
Message:          An unexpected error occurred while resolving 'xxx.Views.LoginWindow'
InnerException:   Unity.ResolutionFailedException, Use !PrintException 000001E34A986228 to see more.
StackTrace (generated):SP               IP               Function0000007735D668E0 00007FF95A64DEC8 Prism_Unity_Wpf!Prism.Unity.UnityContainerExtension.Resolve(System.Type, System.ValueTuple`2<System.Type,System.Object>[])+0x2a80000007735D7DC60 00007FF95A64DBFD Prism_Unity_Wpf!Prism.Unity.UnityContainerExtension.Resolve(System.Type)+0x3d0000007735D7DCA0 00007FF95A64DB88 Prism!Prism.Ioc.IContainerProviderExtensions.Resolve[[System.__Canon, System.Private.CoreLib]](Prism.Ioc.IContainerProvider)+0x480000007735D7DCF0 00007FF95A956742 xxx!xxx.App.InitializeShell(System.Windows.Window)+0x420000007735D7DD40 00007FF959B21148 Prism_Wpf!Prism.PrismApplicationBase.Initialize()+0x2080000007735D7DDA0 00007FF959B20F17 xxx!xxx.App.<>n__0()+0x17....

从卦象来看,这不是最原始的异常,言外之意就是下面还有子异常,也只有找到最里层的异常才能发现灾难的祸根,经过一层层的下钻,最后找到了最原始的异常,参考如下:


0:000> !PrintException /d 000001E34A97E940
Exception object: 000001e34a97e940
Exception type:   System.PlatformNotSupportedException
Message:          System.IO.Ports is currently only supported on Windows.
InnerException:   <none>
StackTrace (generated):SP               IP               Function0000007735D7B580 00007FF95A9588E7 System_IO_Ports!System.IO.Ports.SerialPort.GetPortNames()+0x470000007735D7B5C0 00007FF95A958859 xxx!xxx.ViewModels.LoginWindowViewModel.RefreshComs()+0x190000007735D7B600 00007FF95A957FBC xxx!xxx.ViewModels.LoginWindowViewModel..ctor()+0x14c0000007735D7B9D0 0000000000000000 System_Private_CoreLib!System.RuntimeMethodHandle.InvokeMethod(System.Object, Void**, System.Signature, Boolean)+0x46a770b00000007735D7B9D0 00007FF9B8C03106 System_Private_CoreLib!System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(System.Object, System.Reflection.BindingFlags)+0x36StackTraceString: <none>
HResult: 80131539

从卦中来看是 GetPortNames() 方法抛出来的平台不支持异常,这就很迷惑了。

2. 为什么会平台不支持

了解 PlatformNotSupportedException 异常,只能寻找相关的源代码了,通过dnspy截图如下:

从卦中来看这是一个空方法,接下来拿这个异常在网上找下资料,看样子是这位朋友需要升级或者降级 system.io.ports 的版本,截图如下:

完整链接:https://learn.microsoft.com/en-us/answers/questions/1621393/system-io-ports-only-availble-on-windows-but-im-us

本来是很兴奋的,以为是类似多线程操控非 volatile 变量导致的debug和release行为不一致呢,结果是这玩意,害!

三:总结

本次故障相对比较简单,对我们这些老手来说简直是 1+1,但我们何尝不是从新手练过来的,所以本篇是初学者很好的一个练手素材。

图片名称

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

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

相关文章

实用指南:题解:AT_abc401_c [ABC401C] K-bonacci

实用指南:题解:AT_abc401_c [ABC401C] K-bonacci2025-10-23 11:44 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

深入解析:机器学习——聚类算法

深入解析:机器学习——聚类算法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

ASP.NET Core Blazor 路由配置和导航

大家好,我是码农刚子。本文系统介绍了Blazor单页应用的路由机制。主要内容包括:1)基础路由配置,通过@page指令定义URL映射;2)路由参数处理,支持参数约束、可选参数和通配符捕获;3)编程式导航实现,利用Naviga…

session cookie token的区别

核心区别:session是服务器端存储的用户会话数据,cookie是客户端(浏览器)存储的小型文本,token是无状态的身份凭证,通常由客户端携带、服务器验证。存储位置与安全性• Session:存于服务器(内存/数据库),安全…

基于DSP的伺服电机驱动器程序设计

基于DSP的伺服电机驱动器程序设计,结合TMS320F2806芯片特性及工业级实现标准:一、硬件架构设计 1. 核心电路拓扑 DSP(TMS320F2806) ├── PWM模块 → IR2110驱动芯片 → IGBT逆变桥 ├── CAP模块 → 霍尔位置…

cookie和缓存的区别

核心区别:cookie是用于存储用户身份、偏好等小量会话数据的客户端文本文件,而缓存是用于暂存网页资源(如图片、JS)以加速加载的本地存储,二者用途和数据类型完全不同。核心用途• Cookie:核心是“记录用户信息”…

【内网渗透】第168天:基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建

安全级别最高的LAN Area(内网); 安全级别中等的DMZ区域; 安全级别最低的Internet区域(外网)。 三个区域因担负不同的任务而拥有不同的访问策略。 1.内网域 分类:单域、子域、父域、域树、域森林、DNS域名服务器…

2025年常州健身房私教权威推荐榜:专业教练资质与个性化课程服务的口碑之选

2025年常州健身房私教权威推荐榜:专业教练资质与个性化课程服务的口碑之选 在健康意识日益增强的当下,健身行业迎来了前所未有的发展机遇。作为长三角地区的重要城市,常州的健身市场呈现出蓬勃发展的态势。随着消费…

电脑没声音怎么办?4种方法快速修复电脑无声问题(实测有效)

当电脑突然没声音时,很多用户会以为是硬件故障,其实90%以上的情况都能自行修复。本文系统讲解了 电脑没声音的常见原因,并提供了4种实测有效的解决方案——从基础音量设置、硬件连接检查,到声卡驱动更新与系统音频…

易基因:JAR (IF13):西农陈玉林团队多组学分析揭示绵羊早期胚胎发育的分子与表观遗传调控机制|项目文章

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 近日,西北农林科技大学博士后金妙函等为第一作者,陈玉林教授和王小龙教授为通讯作者,在国际知名期刊《Journal of Advanced Research》上发表题为…

2025 年一线门窗厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

在门窗行业,一线品牌凭借技术研发、智能制造与市场服务能力,持续引领产业升级。本文基于企业产能、专利成果、客户案例及行业调研数据,深度解析2025年综合实力领先的三大门窗生产企业。 TOP1 佛山市安格尔门窗有限公…

uniapp h5内嵌h5重复进入css动画卡顿的问题

大该原因是内嵌的h5问题,但具体原因不知道,有那位大神知道麻烦告诉我一下,我这个解决文案也是最后的手段 因为内嵌h5的生命周期只在第一次进入页面时执行,后面重复进入不会执行,所以没有办法通过onshow来重复触发…

2025 年北京杜拉维特马桶公司最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

在高端卫浴市场,北京杜拉维特马桶凭借其创新技术体系与精细化服务模式,持续领跑行业。据2025年《中国卫浴产业白皮书》数据显示,该品牌在华北市场占有率已达28.3%,智能马桶产品返修率控制在0.45% 以下,远低于行业…

http明文容易暴露信息

Wireshark抓包工具:https://www.wireshark.org/filter 过滤语句:http.request.method==POST只显示了http 协议下 post 请求的数据包信息中有login登录信息明文传输会显示用户名和密码

2025 年青岛金属材料检测公司最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

随着工业质量要求不断提升,金属材料检测成为保障产品安全与性能的关键环节。为帮助企业精准选择合作伙伴,本文通过对青岛地区主流检测公司的技术设备、服务案例、检测精度及行业口碑进行综合评估,发布2025年金属材料…

2025 年铝门窗厂家最新推荐榜:系统/智能/断桥/窄边/定制/全景/阳光房/隐框/隔声/防火铝门窗公司推荐

引言 随着建筑装饰行业升级,铝门窗市场需求激增,但行业乱象也让消费者与采购方陷入选择困境。部分小厂缺乏规范生产体系,产品材质不达标、工艺粗糙,导致耐用性差;多数品牌产品同质化严重,难以满足个性化与高性能…

MATLAB实现蒙特卡洛法的10负荷点配电网可靠性计算

一、程序架构设计 graph TD A[初始化参数] --> B[构建电网拓扑] B --> C[生成故障场景] C --> D{状态转移模拟} D -->|故障发生| E[计算停电影响] D -->|正常运行| F[记录可靠性数据] E --> G[更新可…

2025 年苏州机械设备EAC认证公司最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析

在全球化贸易背景下,机械设备出口至俄语区及独联体国家需通过EAC认证,以确保产品符合海关联盟技术法规。苏州作为中国制造业重镇,多家认证公司在此领域竞争激烈。本文基于2025年行业调研数据,从企业专业团队实力、…

从普通用户到影视后期都能用!Topaz Video AI 7.0.0 靠 AI 搞定视频修复与质量升级

介绍 在视频创作与后期领域,低分辨率画面模糊、高帧率转换卡顿、压缩伪影明显等问题,一直是影响作品质量的核心痛点。尤其对于开发者、影视后期人员及内容创作者而言,既需要高效的工具解决画质问题,又希望避免依赖…

AI Agent的未来之争:任务规划,该由人主导还是AI自主?——阿里云RDS AI助手的最佳实践

引言 AI Agent其基础架构可以简单划分为 Agent = LLM + 任务规划(Plan) + 记忆(Memory) + 工具使用(Tools),现象级的AI Agent,例如deepresearch、manus、claude code等都在这个基础框架上构建。图源 https://w…