Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 我如何知道崩溃转储的CLR版本?_Debugging_Clr_Windbg_Crash Dumps - Fatal编程技术网

Debugging 我如何知道崩溃转储的CLR版本?

Debugging 我如何知道崩溃转储的CLR版本?,debugging,clr,windbg,crash-dumps,Debugging,Clr,Windbg,Crash Dumps,我有一个小型转储程序从.NET应用程序中崩溃。是否有任何方法可以使用Windbg或其他工具了解故障机器(生成崩溃转储)的CLR版本(例如mscorwks.dll的版本)?在Windbg中:最简单的方法是使用!eeversion命令,但如果您需要其他信息,可以将lm命令与运行时模块mscorwks的vverbose选项一起使用。如果您在.NET 4上,则运行时称为clr,因此在这种情况下,您需要相应地更改命令 0:026> lm vm mscorwks start end

我有一个小型转储程序从.NET应用程序中崩溃。是否有任何方法可以使用Windbg或其他工具了解故障机器(生成崩溃转储)的CLR版本(例如mscorwks.dll的版本)?

在Windbg中:最简单的方法是使用
!eeversion
命令,但如果您需要其他信息,可以将
lm
命令与运行时模块
mscorwks
v
verbose选项一起使用。如果您在.NET 4上,则运行时称为
clr
,因此在这种情况下,您需要相应地更改命令

0:026> lm vm mscorwks
start    end        module name
79e70000 7a3ff000   mscorwks T (no symbols)           
    Loaded symbol image file: mscorwks.dll
    Image path: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
    Image name: mscorwks.dll
    Timestamp:        Wed Oct 24 09:41:29 2007 (471EF729)
    CheckSum:         00597AA8
    ImageSize:        0058F000
    File version:     2.0.50727.1433
    Product version:  2.0.50727.1433
    File flags:       0 (Mask 3F)
    File OS:          4 Unknown Win32
    File type:        2.0 Dll
    File date:        00000000.00000000
    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4
在WinDbg中变得冗长:

>lm v 
............. (lots of modules).......

687d0000 68d06000   System_Xml_ni   (deferred)             
Image path: C:\Windows\assembly\NativeImages_v2.0.50727_32\System.Xml\38b9d09539b67b08ee996db6c71f8a9b\System.Xml.ni.dll
Image name: System.Xml.ni.dll
Has CLR image header, track-debug-data flag not set
Timestamp:        Mon Oct 06 20:43:49 2008 (48EADAF5)
CheckSum:         00000000
ImageSize:        00536000
File version:     2.0.50727.3074
Product version:  2.0.50727.3074
File flags:       0 (Mask 3F)
File OS:          4 Unknown Win32
File type:        2.0 Dll
File date:        00000000.00000000
Translations:     0409.04b0
CompanyName:      Microsoft Corporation
ProductName:      Microsoft® .NET Framework
InternalName:     System.Xml.dll
OriginalFilename: System.Xml.dll
ProductVersion:   2.0.50727.3074
FileVersion:      2.0.50727.3074 (QFE.050727-3000)
FileDescription:  .NET Framework
LegalCopyright:   © Microsoft Corporation.  All rights reserved.
Comments:         Flavor=Retail
或者,在VisualStudio中加载转储文件,并使用“调试|窗口|模块”工具窗口显示其中一些信息


使用clr.dll的版本信息的两个不同.Net版本的示例:

.Net 4.0(.x?)

.Net 4.5.2

Image name: clr.dll
Timestamp:        Fri Nov 07 20:09:21 2014 (545CA861)
...
File version:     4.5.27.0
Product version:  4.0.30319.0

!!EEVersion应该给出CLR版本。

嗨,Brian,我认为这个命令只检查调试机器上使用的CLR版本,而不检查故障机器的CRL版本。有什么评论吗?另一个问题是,版本不完整,它不仅应该是50727,而且应该是50727.xxxx,如50727.3053。@George2:lm显示在检查转储文件时加载的模块,因为这是转储内存的一部分。至于版本号,我假设它可以从文件和/或产品版本中读取。+1因为它可以在不加载特定(因此在该机器上可能不可用)mscordacwks.dll/sos.dll等的情况下工作。我还添加了另外两个.Net版本的示例以供参考。您只需要一个模块的信息:lm vm clr
Image name: clr.dll
Timestamp:        Fri Nov 07 20:09:21 2014 (545CA861)
...
File version:     4.5.27.0
Product version:  4.0.30319.0