免费网站建设自带后台管理程序,网站开发 语言,学校网站建设情况,深圳专业建站公司有哪些一#xff1a;背景 1. 讲故事最近几天接到了几个crash的求助#xff0c;可能这几个朋友没玩过怎么去生成dump#xff0c;只能手把手教#xff0c;感觉也不是一个办法#xff0c;所以有必要总结一下#xff0c;后续再有朋友咨询的话#xff0c;我就可以把这篇文章丢过去了… 一背景 1. 讲故事最近几天接到了几个crash的求助可能这几个朋友没玩过怎么去生成dump只能手把手教感觉也不是一个办法所以有必要总结一下后续再有朋友咨询的话我就可以把这篇文章丢过去了????????????好了我大概总结了下面三种方式procdump -eprocdump - AEDebugWindows Error Reporting老读者应该知道我一直都推崇 procdump 去搞定这些事情毕竟它是一款可跨平台抓取的强大灵巧工具。二: 实现可测试案例 从 dump 样本来看web类的程序是最多的所以这里我就以 Asp.NET MVC 5 作为案例在 RouteConfig 类中我使用一个Timer不断的抛出异常目的就是把 w3wp 进程给弄挂掉参考代码如下public class RouteConfig{public static Timer timer;public static void RegisterRoutes(RouteCollection routes){timer new Timer(new TimerCallback(m {var r 10 / Convert.ToInt32(0);}), null, 60000, 5000);routes.IgnoreRoute({resource}.axd/{*pathInfo});routes.MapRoute(name: Default,url: {controller}/{action}/{id},defaults: new { controller Home, action Index, id UrlParameter.Optional });}}对了肯定有朋友问为什么不在 Action 中抛异常这是因为 Http管道 会把这种异常包装成 http 500所以就达不到 crash 的效果了。接下来把程序部署到 IIS 上并运行可以清楚的看到 Windows 事件查看器 中成功的记录到了崩溃信息如下图所示三: 3种抓取方式解析 1. 使用 procdump -e这种方式简单但不太稳定因为有几个朋友告诉我procdump在抓取的过程中报错了原因是进程已退出不管怎么说这个要看你运气了哈这里的 -e 是 exception 的简写具体可参见官方文档: https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump。
-e Write a dump when the process encounters an unhandled exception. Include the 1 to create dump on first chance exceptions.完整的参考命令如下
C:\Windows\system32procdump -e -ma -w w3wp E:\testProcDump v10.0 - Sysinternals process dump utility
Copyright (C) 2009-2020 Mark Russinovich and Andrew Richards
Sysinternals - www.sysinternals.comWaiting for process named w3wp......Press Ctrl-C to end monitoring without terminating the process.[21:12:08] Exception: 04242420
[21:12:08] Exception: E0434352.CLR
[21:12:09] Exception: E0434352.CLR
[21:12:09] Exception: E0434352.CLR
[21:12:09] Exception: E0434352.CLR
[21:12:09] Exception: E0434352.CLR
[21:12:09] Exception: E0434352.CLR
[21:12:14] Exception: C0000094.INT_DIVIDE_BY_ZERO
[21:12:14] Unhandled: C0000094.INT_DIVIDE_BY_ZERO
[21:12:14] Dump 1 initiated: E:\test\w3wp.exe_210525_211214.dmp
[21:12:14] Dump 1 writing: Estimated dump file size is 326 MB.
[21:12:15] Dump 1 complete: 326 MB written in 1.2 seconds
[21:12:15] Dump count reached.从输出信息看已经成功抓取了 dump 文件如果你的机器有多个 w3wp可以将其替换成 pid参考命令如下
C:\Windows\system32procdump -e -ma 9320 E:\test2. 将 procdump 作为 AeDebug 的默认调试器它的大概运作原理是当程序出现了未处理异常此时会激活操作系统的 Win32 unhandled exception filter这个过滤器会调用注册表中 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug 节点配置的调试器也就是我的 Procdump要将 procdump 送到注册表的 AeDebug 节点可以使用 -i 进行注册。
-i Install ProcDump as the AeDebug postmortem debugger. Only -ma, -mp, -d and -r are supported as additional options.完整参考命令如下
C:\Windows\system32procdump -ma -i E:\testProcDump v10.0 - Sysinternals process dump utility
Copyright (C) 2009-2020 Mark Russinovich and Andrew Richards
Sysinternals - www.sysinternals.comSet to:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug(REG_SZ) Auto 1(REG_SZ) Debugger C:\xcode\soft\Procdump\procdump.exe -accepteula -ma -j E:\test %ld %ld %pSet to:HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug(REG_SZ) Auto 1(REG_SZ) Debugger C:\xcode\soft\Procdump\procdump.exe -accepteula -ma -j E:\test %ld %ld %pProcDump is now set as the Just-in-time (AeDebug) debugger.从输出信息看已经成功将其送入到注册表了接下来可以打开 注册表编辑器 去验证。最后就是把 web 跑起来1min之后就会成功的看到 E:\test 下的 dump 文件啦截图如下从图中看有2个dump具体为什么是2个我就不管了就怕不生成。????????????3. 借助 Windows Error Reporting 生成它的大概运作原理是借助 windows 自带的 Windows Error Reporting 服务去帮助我们生成程序的 crash dump要实现的话必须开启这个服务并且在注册表中配置好你要抓取的exe程序配置起来有点繁琐这里有一个bat脚本直接运行即可简单粗暴。
SET DMPPATHE:\test
SC CONFIG WerSvc START AUTO
NET START WerSvc
ECHO 启用完成REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger /f
REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger /fREG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger /f
REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger /fECHO 删除完成REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe /f
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe /t REG_SZ /v DumpFolder /d %DMPPATH% /f
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe /t REG_DWORD /v DumpCount /d 2 /f
REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe /t REG_DWORD /v DumpType /d 2 /fECHO 启用完成PAUSE有3个参数需要简单解释一下。DumpFolderdump的存放路径DumpCount 最多保留几个 dump 文件DumpType 0Custom dump. 1:Mini dump. 2:Full dumpbat执行完成后可以到注册表中验证一下。接下来把web跑起来1min之后你就会看到生成的dump文件了截图如下三总结 对于抓取程序crash的dump这三种方式基本上就可以做到万无一失总结完后对你对我都是节省宝贵的时间????????????。END工作中的你是否已遇到 ... 1. CPU爆高2. 内存暴涨3. 资源泄漏4. 崩溃死锁5. 程序呆滞等紧急事件全公司都指望着你能解决... 危难时刻才能展现你的技术价值作为专注于.NET高级调试的技术博主欢迎微信搜索: 一线码农聊技术免费协助你分析Dump文件希望我能将你的踩坑经验分享给更多的人。