我收到一份 WER 报告,说我们的 .net 应用程序在某台机器上崩溃了,我得到了崩溃的转储文件,但我尝试了很多方法,阅读了很多关于调试 .net 崩溃的文章,但仍然没有运气,我什至无法运行sos.dll提供的扩展命令,我总是收到以下消息
“找不到运行时 DLL (clr.dll),0x80004005 扩展命令需要 clr.dll 才能执行某些操作。”
我想知道如何知道那台机器上的 .net 框架版本?因为非扩展命令可以工作!!请帮忙!!
当我使用“lm”命令列出所有加载的模块时,我没有在模块列表中找到“clr”或“clrjit”模块,这是否意味着我的应用程序在崩溃之前实际上没有运行,可以我说机器上的 .net 框架坏了?
(locationsswitch 是我的应用程序,它被编译为 .net Framework 4.0 上的 x86 应用程序目标)
0:000> .load C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll
0:000> .load C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
0:000> .chain
Extension DLL search Path:
C:\Program Files (x86)\Debugging Tools for Windows (x86)\WINXP;C:\Program Files (x86)\Debugging Tools for Windows (x86)\winext;C:\Program Files (x86)\Debugging Tools for Windows (x86)\winext\arcade;C:\Program Files (x86)\Debugging Tools for Windows (x86)\pri;C:\Program Files (x86)\Debugging Tools for Windows (x86);C:\Program Files (x86)\Debugging Tools for Windows (x86)\winext\arcade;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Common Files\Lenovo;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\
Extension DLL chain:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll: image 4.0.30319.18444, built Thu Oct 31 05:47:48 2013
[path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll]
C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll: image 4.0.30319.18444, API 1.0.0, built Thu Oct 31 05:40:34 2013
[path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll]
dbghelp: image 6.12.0002.633, API 6.1.6, built Tue Feb 02 04:08:26 2010
[path: C:\Program Files (x86)\Debugging Tools for Windows (x86)\dbghelp.dll]
ext: image 6.12.0002.633, API 1.0.0, built Tue Feb 02 04:08:31 2010
[path: C:\Program Files (x86)\Debugging Tools for Windows (x86)\winext\ext.dll]
exts: image 6.12.0002.633, API 1.0.0, built Tue Feb 02 04:08:24 2010
[path: C:\Program Files (x86)\Debugging Tools for Windows (x86)\WINXP\exts.dll]
uext: image 6.12.0002.633, API 1.0.0, built Tue Feb 02 04:08:23 2010
[path: C:\Program Files (x86)\Debugging Tools for Windows (x86)\winext\uext.dll]
ntsdexts: image 6.1.7650.0, API 1.0.0, built Tue Feb 02 04:08:08 2010
[path: C:\Program Files (x86)\Debugging Tools for Windows (x86)\WINXP\ntsdexts.dll]
0:000> !pe
Failed to find runtime DLL (clr.dll), 0x80004005
Extension commands need clr.dll in order to have something to do.
0:000> lm
start end module name
00400000 0040a000 locationswitch (deferred)
6f720000 6f992000 AcLayers (deferred)
705c0000 70616000 mscoree (deferred)
70620000 706b9000 apphelp (deferred)
70960000 7096d000 sfc_os (deferred)
70970000 70973000 sfc (deferred)
70eb0000 70ec4000 mpr (deferred)
749e0000 74a3e000 winspool (deferred)
75560000 755cd000 sysfer (deferred)
755d0000 75623000 bcryptPrimitives (deferred)
75630000 75639000 CRYPTBASE (deferred)
75640000 7565d000 sspicli (deferred)
756d0000 7581f000 user32 (deferred)
75830000 758ff000 KERNELBASE (pdb symbols) d:\debug_pdb\wkernelbase.pdb\AD71B4B6970B457EAAC4B4033A1DC8892\wkernelbase.pdb
75980000 759a5000 imm32 (deferred)
75d30000 75edd000 setupapi (deferred)
75ee0000 75f90000 rpcrt4 (deferred)
76030000 760b7000 oleaut32 (deferred)
76260000 7629e000 sechost (deferred)
762a0000 762e1000 shlwapi (deferred)
762f0000 763f7000 gdi32 (deferred)
76460000 765a0000 kernel32 (deferred)
765a0000 766ee000 combase (deferred)
766f0000 767e7000 msctf (deferred)
767f0000 779b0000 shell32 (deferred)
77a30000 77a6a000 cfgmgr32 (deferred)
77a80000 77b3e000 msvcrt (deferred)
77c10000 77d78000 ntdll (private pdb symbols) d:\debug_pdb\wntdll.pdb\080480471A674FFFA11D05343C7475392\wntdll.pdb
最佳答案
转储似乎有问题。您假设它是 .NET 4 转储,但未加载 CLR。因此,让我们后退几步,从不同的角度来看待它。
在开始调试之前做一些先决条件检查总是好的。让我们验证您对转储的所有假设是否正确。为此,您应该对收到的转储有一个大概的了解。
在进行任何分析之前我总是检查的事情:
这真的是我的申请吗?
有时,客户只是发送了错误的转储。他们在任何地方的磁盘上找到的东西。 如果是 WER(通过在线门户),则会发生冲突,您可能会从 Microsoft 下载错误的转储。
|
lm fm MyAppName
检查应用程序的名称和安装目录。找到模块了吗?安装目录是至少合理还是完全关闭?
它是官方(支持的)版本吗?
lm vm MyAppName
根据您发布的产品列表检查文件版本和产品版本。
它是否在受支持的操作系统上运行?
vertarget
第一行应该给出操作系统。请注意,对于 32 位转储,它会说 x86,即使在 x64 上运行也是如此。
转储类型是否正确?
对于 .NET,您需要完整的内存转储。
||
.shell -ci ".dumpdebug" find "MiniDump"
第一个命令应该输出“Full memory user mini dump”,第二个命令应该包含“0002 MiniDumpWithFullMemory”。
*转储的位数是否正确?**
特别是对于 64 位 Windows 上的 32 位应用程序,这是必不可少的。
lm m wow64
如果找到 WOW64 模块,请求新的转储。
是否发生了 .NET 异常?
至少我们应该知道我们在追求什么。如果不是 .NET,最好提前知道。
.exr -1
输出应为 e0434f4d(CLR 异常)。只有在某些情况下,.NET 才会使用其他东西(例如 c0000005(访问冲突) 用于 NullReferenceException)。
加载了哪个版本的 .NET?
特别是如果你想重现这个问题。
lm vm clr
lm vm mscorwks
始终检查两者。可能会同时加载两个版本(在这种情况下,您可能无法分析转储)。
这是最近的转储吗?
客户发送的是新转储还是上周发送的垃圾转储?检查它,以免浪费数小时的调试时间。
.time
至少不满足一个先决条件:未加载 CLR,因此很可能发生 native 异常。开始于
.exr -1
看看它可能是什么。
您的应用程序可能在加载任何 .NET 之前崩溃。这可能是由于注入(inject)到进程中的一些 Hook DLL。
也许它找不到引用的 DLL,因为它没有安装、删除或程序是从不同的工作目录运行的。
.shell -ci "!peb" find "CurrentDirectory"
转储是使用 SysInternals ProcDump 获取的使用选项 -e1 并在初始断点处停止(这对许多开发人员来说是意想不到的)。
关于.net - 无法在 windbg 中调试 .net 转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27035145/
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub