标签: sosex

由sosex.mbp或sosex.mbm设置的断点不起作用

我正在使用VS.NET 2010.我编译了一个非常简单的.NET 4.0应用程序.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestWindbg
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine();
            Func1();
        }

        static void Func1()
        {
            int i = 0;
            int j = i + 2;
            Console.WriteLine(j);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我打开windbg 6.12.0002.633编译的可执行文件.键入以下命令以加载sosex

.loadby sosex clr
Run Code Online (Sandbox Code Playgroud)

然后,键入以下命令以设置断点

!mbm TestWindbg.Program.Func1
!mbp Program.cs 16
Run Code Online (Sandbox Code Playgroud)

然后运行该程序.没有一个破发点被击中.

任何的想法?

*编辑*

在这里,我根据Marc的要求粘贴有关我的环境的更多详细信息

0:004> !mbl
1 eu: disable *!TESTWINDBG.PROGRAM.FUNC1 ILOffset=0: pass=1 oneshot=false thread=ANY
2 eu: disable Program.cs, line 16: pass=1 oneshot=false thread=ANY
0:004> .chain
Extension …
Run Code Online (Sandbox Code Playgroud)

.net c# debugging windbg sosex

11
推荐指数
1
解决办法
1678
查看次数

如何识别阵列类型?

我有一个OutOfMemoryException,我想分析应该创建的数组的大小和类型.

我为这种情况创建了一个演示目的转储,我能够获得以下信息:

0:000> !pe
Exception object: 023f389c
Exception type: System.OutOfMemoryException
Message: <none>
InnerException: <none>
StackTrace (generated):
    SP       IP       Function
    0015EE44 0099007F OOM2!OOM2.Program.Main()+0xf

StackTraceString: <none>
HResult: 8007000e

0:000> !u 0099007F 
Normal JIT generated code
OOM2.Program.Main()
Begin 00990070, size 22
00990070 baffffff7f      mov     edx,7FFFFFFFh
00990075 b90241a478      mov     ecx,offset mscorlib_ni+0x4102 (78a44102)
0099007a e8192194ff      call    002d2198 (JitHelp: CORINFO_HELP_NEWARR_1_VC)
>>> 0099007f 8bc8            mov     ecx,eax
...
Run Code Online (Sandbox Code Playgroud)

所以我可以看到创建了一个新数组,大小为7FFFFFFF,这是20亿个项目.(请忽略这样一个事实:您甚至无法在32位.NET应用程序中创建该大小的byte [],因此在此示例中类型可能根本不重要.)

我现在已经读过数组的类型在ECX寄存器中,但遗憾的mscorlib_ni+0x4102 (78a44102)是不是很有帮助.

我尝试过!mln,!mdt甚至不切实际!ip2mt,但没有一个显示预期bytebyte[]输出.有没有办法从mscorlib的原生图像中获取类型?

.net il windbg sos sosex

8
推荐指数
1
解决办法
334
查看次数

为什么psscor4命令不会运行

出于某种原因,我加载psscor4后无法运行任何命令.我从MS网站下载了x64的psscor4,并把它放在windbg所在的同一文件夹中.在加载psscor4之前,我可以毫无问题地运行sos命令.

0:003> .loadby sos clr

0:003> lmvm clr
start             end                 module name
00007ffa`35630000 00007ffa`35fc8000   clr        (deferred)             
    Image path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
    Image name: clr.dll
    Timestamp:        Wed Nov 27 19:25:30 2013 (52968D7A)
    CheckSum:         00996ED8
    ImageSize:        00998000
    File version:     4.0.30319.34011
    Product version:  4.0.30319.34011
    File flags:       8 (Mask 3F) Private
    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:     clr.dll
    OriginalFilename: clr.dll
    ProductVersion:   4.0.30319.34011
    FileVersion:      4.0.30319.34011 built by: FX45W81RTMGDR
    PrivateBuild:     DDBLD109
    FileDescription: …
Run Code Online (Sandbox Code Playgroud)

.net c# windbg sos sosex

6
推荐指数
2
解决办法
1466
查看次数

WinDBG可以在符号存储中找到mscordacwks.dll吗?

问题

有很多手动方法可以让WinDBG在没有符号存储的情况下找到mscordacwks.dll(将文件放在某处的路径中,将其放在与windbg.exe相同的文件夹中,将其放在我的Framework\v文件夹中,指定路径WinDBG使用.cordll -lp c:\dacFolder等),但他们都只为修复它.对于使用我的符号存储的每个人,我需要更普遍地修复它.

我能想到的可能的解决方案是:

  • 使用mscordacwks.dll的子文件夹名称而不是mscorwks.dll的文件夹名称来检查符号存储的WinDBG.
  • 可以使用SymStore.exe在mscorwks.dll的子文件夹名称下添加mscordacwks.dll,以便WinDBG在它看起来时找到它.

问:这些事情中的任何一个都是可能的,或者是否有其他方式我没有考虑解决问题?

的背景

在分析.NET进程时,我遇到了(显然很常见的)问题,即psscor2(和sosex)在我的机器上找不到合适的mscordacwks.dll.WinDBG中的错误是:

Failed to load data access DLL, 0x80004005 
Verify that 1) you have a recent build of the debugger (6.2.14 or newer) 
            2) the file mscordacwks.dll that matches your version of mscorwks.dll is 
                in the version directory 
            3) or, if you are debugging a dump file, verify that the file 
                mscordacwks_<arch>_<arch>_<version>.dll is on your symbol path. 
            4) you are debugging on the same architecture …
Run Code Online (Sandbox Code Playgroud)

clr windbg sos symstore sosex

6
推荐指数
1
解决办法
2942
查看次数

约50%的.NET堆可用对象。如何知道是什么导致OOM

我试图确定是什么导致我的应用程序高内存使用率。所以我拿了进程转储文件。EEHeap命令显示.NET内存堆中大约有2.8 GB。

0:000> !EEHeap -gc
Number of GC Heaps: 2
------------------------------
Heap 0 (00000000001e3030)
generation 0 starts at 0x00000000a5f21360
generation 1 starts at 0x00000000a5c45a60
generation 2 starts at 0x000000007fff1000
ephemeral segment allocation context: none
 segment     begin allocated  size
000000007fff0000  000000007fff1000  00000000beeca248  0x3eed9248(1055756872)
Large object heap starts at 0x000000027fff1000
 segment     begin allocated  size
000000027fff0000  000000027fff1000  000000028f7d42f8  0xf7e32f8(259928824)
Heap Size:               Size: 0x4e6bc540 (1315685696) bytes.
------------------------------
Heap 1 (00000000001ed9e0)
generation 0 starts at 0x00000001a6c77908
generation 1 starts at 0x00000001a69a8370
generation 2 starts at …
Run Code Online (Sandbox Code Playgroud)

.net garbage-collection out-of-memory sos sosex

5
推荐指数
1
解决办法
958
查看次数

如何使用SOS(或SOSEX)在WinDbg的某个字段中显示具有特定值的托管对象?

我的问题是:

0:000> !DumpHeap -type Microsoft.Internal.ReadLock -stat
------------------------------
Heap 0
total 0 objects
------------------------------
Heap 1
total 0 objects
------------------------------
Heap 2
total 0 objects
------------------------------
Heap 3
total 0 objects
------------------------------
total 0 objects
Statistics:
              MT    Count    TotalSize Class Name
000007fef3d14088    74247      2375904 Microsoft.Internal.ReadLock
Total 74247 objects
Run Code Online (Sandbox Code Playgroud)

我读取此输出的方式是Microsoft.Internal.ReadLock我的堆上有74,247个实例.但是,其中一些可能正在等待收集.

我想只显示那些没有待处理的集合.

例如,0000000080f88e90是其中一个对象的地址,它是垃圾.我知道,因为:

0:000> !mroot 0000000080f88e90
No root paths were found.
0:000> !refs 0000000080f88e90 -target
Objects referencing 0000000080f88e90 (Microsoft.Internal.ReadLock):
NONE
0:000> !do 0000000080f88e90
Name:        Microsoft.Internal.ReadLock
MethodTable: 000007fef3d14088
EEClass:     000007fef3c63410 …
Run Code Online (Sandbox Code Playgroud)

debugging windbg sos sosex

5
推荐指数
1
解决办法
1873
查看次数

获取 LOH 中的对象实例列表

我在托管堆中存在数百个MyClass实例。其中一些位于大对象堆中。下面是各种堆结构的样子

0:000> !EEHeap -gc
Number of GC Heaps: 1
generation 0 starts at 0x0000000002df9de8
generation 1 starts at 0x0000000002dc6710
generation 2 starts at 0x0000000002a01000
ephemeral segment allocation context: none
 segment     begin allocated  size
0000000002a00000  0000000002a01000  0000000002e3c2c0  0x43b2c0(4436672)
Large object heap starts at 0x0000000012a01000
 segment     begin allocated  size
0000000012a00000  0000000012a01000  000000001a5ed558  0x7bec558(129942872)
000000002a980000  000000002a981000  00000000328110b8  0x7e900b8(132710584)
0000000033e00000  0000000033e01000  000000003bd80d78  0x7f7fd78(133692792)
000000001daf0000  000000001daf1000  0000000025996188  0x7ea5188(132796808)
00000000542b0000  00000000542b1000  000000005a4bf100  0x620e100(102818048)
000000005c2b0000  000000005c2b1000  000000006344df88  0x719cf88(119132040)
000000007fff0000  000000007fff1000  00000000878bfbc0  0x78cebc0(126675904)
Total Size:              Size: …
Run Code Online (Sandbox Code Playgroud)

.net windbg sos large-object-heap sosex

5
推荐指数
1
解决办法
1425
查看次数

获取其调用堆栈中包含某个.NET函数的线程?

我有一个73线程的用户模式转储.其中一些是管理的,其中一些是原生的.我想找到托管线程,哪个调用栈包含一定的托管函数.

我在调试器中加载了SOSEX扩展.

现在我~*e !mk要转储所有托管线程,然后手动浏览它们,寻找我需要的东西 - 太长而且无聊.

有没有更好的办法?

windbg crash-dumps sosex

2
推荐指数
1
解决办法
782
查看次数