- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
经常有朋友跟我反馈,说看你的文章就像看天书一样,有没有一些简单入手的dump 让我们先找找感觉,哈哈,今天就给大家带来一篇入门级的案例,这里的入门是从 WinDbg 的角度来阐述的,这个问题如果你通过 记日志,分析代码 的方式,可能真的无法解决,不信的话继续往下看呗! 。
前段时间有位朋友微信上找到我,说他的程序崩溃了,也没找出是什么原因,然后就让朋友抓一个崩溃的dump让我看看.
在 windbg 中有一个自动化的分析命令 !analyze -v 可以寻找到 miniDumpWriteDump 时塞入的 PMINIDUMP_EXCEPTION_INFORMATION 信息,结构如下:
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
DWORD ThreadId;
PEXCEPTION_POINTERS ExceptionPointers;
BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
这个命令执行时间可能很长,要稍等片刻 。
0:000> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
CONTEXT: (.ecxr)
rax=0000000000000198 rbx=0000000000000001 rcx=0000000000000002
rdx=0000000039959600 rsi=0000000000000000 rdi=0000000039959600
rip=00007fffe1e4cba4 rsp=00000000010fc050 rbp=00000000010fc150
r8=0000000000000000 r9=000000003999b640 r10=0000000000000018
r11=00000000010fc020 r12=0000000000000000 r13=00000000010fc370
r14=000000004b727aa0 r15=0000000000000020
iopl=0 nv up ei pl nz na pe nc
cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010202
igxelpicd64+0x1fcba4:
00007fff`e1e4cba4 488b08 mov rcx,qword ptr [rax] ds:00000000`00000198=????????????????
Resetting default scope
EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 00007fffe1e4cba4 (igxelpicd64+0x00000000001fcba4)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 0000000000000000
Parameter[1]: 0000000000000198
Attempt to read from address 0000000000000198
PROCESS_NAME: xxx.exe
上面的崩溃点的汇编语句 mov rcx,qword ptr [rax] 说的非常清楚,访问0区的 0000000000000198 地址必然会是访问违例,接下来简单看一下汇编代码.
0:000> ub igxelpicd64+0x00000000001fcba4
igxelpicd64+0x1fcb80:
00007fff`e1e4cb80 418b09 mov ecx,dword ptr [r9]
00007fff`e1e4cb83 83f910 cmp ecx,10h
00007fff`e1e4cb86 0f83bb0a0000 jae igxelpicd64+0x1fd647 (00007fff`e1e4d647)
00007fff`e1e4cb8c 488d04cd21000000 lea rax,[rcx*8+21h]
00007fff`e1e4cb94 4803c1 add rax,rcx
00007fff`e1e4cb97 488d04c6 lea rax,[rsi+rax*8]
00007fff`e1e4cb9b 4885c0 test rax,rax
00007fff`e1e4cb9e 0f847c0c0000 je igxelpicd64+0x1fd820 (00007fff`e1e4d820)
从汇编代码看是一段 数组操作 的逻辑,捋汇编太累了,我们看下 igxelpicd64.dll 模块到底是谁写的,用 lmvm 观察下.
0:000> lmvm igxelpicd64
Browse full module list
start end module name
00007fff`e1c50000 00007fff`e2cfe000 igxelpicd64 (export symbols) igxelpicd64.dll
Loaded symbol image file: igxelpicd64.dll
Image path: C:\Windows\System32\DriverStore\FileRepository\iigd_dch.inf_amd64_ec5e4cdfcd3a62b8\igxelpicd64.dll
Image name: igxelpicd64.dll
Browse all global symbols functions data
Timestamp: Sat Jul 16 02:54:34 2022 (62D1B7EA)
CheckSum: 010A00BB
ImageSize: 010AE000
File version: 31.0.101.3251
Product version: 31.0.101.3251
File flags: 0 (Mask 3F)
File OS: 10004 DOS Win32
File type: 2.8 Dll
File date: 00000000.00000000
Translations: 0409.04b0
Information from resource tables:
CompanyName: Intel Corporation
ProductName: Intel HD Graphics Drivers for Windows(R)
InternalName: OpenGL
OriginalFilename: ig7icd32
ProductVersion: 31.0.101.3251
FileVersion: 31.0.101.3251
FileDescription: OpenGL(R) Driver for Intel(R) Graphics Accelerator
LegalCopyright: Copyright (c) 1998-2018 Intel Corporation.
从 OpenGL(R) Driver for Intel(R) Graphics Accelerator 来看原来是用来渲染 2D,3D 矢量图形的工具包哈,这东西太底层了,没玩过,不过有一点可以肯定的是这个 dll 是属于 Intel 的,那为什么会调用这个渲染功能呢? 这就需要观察线程栈了.
崩溃有两个场景,一个是崩溃前,一个是崩溃后,要看崩溃前的线程栈我们一定要知道崩溃前的状况,这里用 .ecxr 命令切换,简化后如下:
0:000> .ecxr ; k
rax=0000000000000198 rbx=0000000000000001 rcx=0000000000000002
rdx=0000000039959600 rsi=0000000000000000 rdi=0000000039959600
rip=00007fffe1e4cba4 rsp=00000000010fc050 rbp=00000000010fc150
r8=0000000000000000 r9=000000003999b640 r10=0000000000000018
r11=00000000010fc020 r12=0000000000000000 r13=00000000010fc370
r14=000000004b727aa0 r15=0000000000000020
iopl=0 nv up ei pl nz na pe nc
cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010202
igxelpicd64+0x1fcba4:
00007fff`e1e4cba4 488b08 mov rcx,qword ptr [rax] ds:00000000`00000198=????????????????
*** Stack trace for last set context - .thread/.cxr resets it
# Child-SP RetAddr Call Site
00 00000000`010fc050 00007fff`e1e4c500 igxelpicd64+0x1fcba4
...
07 00000000`010fd430 00007fff`e503b788 igxelpicd64!DumpRegistryKeyDefinitions+0x11865
08 00000000`010fd490 00000000`324147f6 opengl32!glReadPixels+0x88
...
0c 00000000`010fd6d0 00007ff7`f5a3185a GSGlobeDotNet!GeoScene.Globe.GSOGlobe.ScreenToScene+0xa5
...
0e 00000000`010fe1b0 00007ff8`3285d810 System_Windows_Forms_ni!System.Windows.Forms.Control.OnMouseClick+0x9b
...
从线程栈看是用户点击了鼠标,进入了 GSGlobeDotNet.dll ,在读取像素的底层逻辑中抛了异常,然后到网上搜了一下,原来是绘制三维地球的工具包,这个🐂了.
知道这些信息后,让朋友升级下 显卡驱动 试试,后来朋友改了显卡的设置就搞定了,截图如下:
显卡的问题也能导致程序的崩溃,太不可思议了,试想一下你如果只是记日志,看代码,怎么可能找的出问题,哈哈哈,这就是 高级调试 的价值.
最后此篇关于记一次.NET某埋线管理系统崩溃分析的文章就讲到这里了,如果你想了解更多关于记一次.NET某埋线管理系统崩溃分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
创建使用.NET框架的asp.net页面时,访问该页面的客户端是否需要在其计算机上安装.NET框架? IE。用户访问www.fakesite.com/default.aspx,如果他们没有安装框架,他
我阅读了很多不同的博客和 StackOverflow 问题,试图找到我的问题的答案,但最后我找不到任何东西,所以我想自己问这个问题。 我正在构建一个应用程序,其中有一个长时间运行的工作线程,它执行一些
已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 我一直想知道为什么微软为这样一个伟大的平台选择了一个如此奇怪的、对搜索引擎不友好的名称。他们就
.Net Framework .Net .NET Standard的区别 1、.NET Framework 在未来.NET Framework或许成为过去时,目前还是有很多地方在使用的。这一套
如果有选择的话,您会走哪条路? ASP.NET Webforms + ASP.NET AJAX 或 ASP.NET MVC + JavaScript Framework of your Choice
我有一个 Web 服务,它通过专用连接通过 https 使用第三方 Web 服务,我应用了 ServicePointManager.ServerCertificateValidationCallbac
为什么我应该选择ASP.NET Web Application (.NET Framework)而不是ASP.NET Core Web Application (.NET Framework)? 我在
我在网络上没有找到任何关于包含 .NET Standard、.NET Core 和 .NET Framework 项目的 .NET 解决方案的公认命名约定。 就我而言,我们在 .NET 框架项目中有以
.NET Compact 是 .NET 的完美子集吗? 假设我考虑了屏幕大小和其他限制并避免了 .NET Compact 不支持的类和方法,或者 .NET Compact 是一个不同且不兼容的 GUI
我已经阅读了所有我能找到的关于 connectionManagement 中的 maxconnection 设置的文章:即 http://support.microsoft.com/kb/821268
我现在正在使用asp.net mvc,想知道使用内置的Json或 Json.Net哪个是更好的选择,但我不确定一个人是否比另一个人有优势。 另外,如果我确实选择沿用Json.Net的路线,那么我应该选
在 Visual Studio 中,您至少可以创建三种不同类型的类库: 类库(.NET Framework) 类库(.NET 标准) 类库(.NET Core) 虽然第一个是我们多年来一直使用的,但我
.NET 和 ASP.NET 之间有什么区别?它们有什么关系? 最佳答案 ASP.Net 基于 .Net 框架构建,提供有关 Web 开发的附加功能。 你可以去看看wikipedia article
在安装更高版本(3.0)之前,我需要安装.net框架1.1和2.0吗?或者单独安装 3.0 框架就足够了,并为在早期框架版本上编写的软件提供支持?谢谢 ,丽然 最佳答案 不,您不必安装以前的框架。 我
我正在开发一个项目,人们可以“更新”类别,例如更改类别的名称。我收到以下消息 This is called after clicking update 按钮 with the SQL statemen
.NET 类 System.Net.CookieContainer 线程安全吗? --更新:交 key 答复-- 是否有任何方法可以确保异步请求期间修改的变量(即 HttpWebRequest.Coo
我正在使用 JScript.NET 在我编写的 C# WinForms 应用程序中编写脚本。它工作得很好,但我只是尝试在脚本中放置一些异常处理,但我无法弄清楚如何判断我的 C# 代码抛出了哪种类型的异
我需要你的帮助, 比如我有一个小数类型的变量,我想这样取整。 例如 3.0 = 3 3.1 = 4 3.2 = 4 3.3 = 4 3.4 = 4 3.5 = 4 3.6 = 4 3.7 = 4 3.
我使用过这样的代码:http://msdn.microsoft.com/en-us/library/dw70f090.aspx在 ASP.NET 中工作之前访问数据库(2-3 年前)。我没有意识到我正
自 ConfigurationManager .NET Standard 中不存在,检索正在执行的程序集的应用程序设置的最佳方法是什么,无论是 web.config或 appSettings.{env
我是一名优秀的程序员,十分优秀!