相关疑难解决方法(0)

如何识别阵列类型?

我有一个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
查看次数

标签 统计

.net ×1

il ×1

sos ×1

sosex ×1

windbg ×1