Re: windbg的.loadby sos clr第一次总不成功,必须在加载clrjit以后才能运行,为何?
WinDbg
windbg的.loadby sos clr第一次总不成功,必须在加载clrjit以后才能运行,为何?
iuikjasd
2014-06-24, 16:19 下午
我用vs2012写了一个很简单的C#程序(创建控制台程序,所有选项默认),debug版,源代码如下:
class Program
{
static void Main(string[] args)
{
int a;
string str;
a = 5;
str = a.ToString();
Console.WriteLine(str);
}
}
编译得到debug版的可执行程序。启动windbg(windbg:6.11.0001.404 x86),Ctl+E加载这个程序,然后
0:000> .loadby sos clr
Unable to find module 'clr'
奇怪了,为什么说找不到clr这个模块呢?明明就是在sos.dll里面的一个模块对吧?
-----------------------------------------------------------------------------------
然后我发现这样就可以:
(1).restart
(2)sxe ld:clrjit
(3)g 中断在加载clrjit的场景中
(4).loadby sos 没有问题。
windbg的屏幕输出如下:
------------------------------------------------------------------------------------
0:000> .restart
CommandLine: "D:\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication2\bin\Debug\ConsoleApplication2.exe"
Symbol search path is: srv*d:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
(7c0.31ec): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=d14b0000 edx=0027e358 esi=fffffffe edi=00000000
eip=7701103b esp=003cfaf4 ebp=003cfb20 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrpDoDebuggerBreak+0x2c:
7701103b cc int 3
0:000> sxe ld:clrjit
0:000> g
(7c0.31ec): Unknown exception - code 04242420 (first chance)
ModLoad: 5f070000 5f0de000 C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=7efdd000 edi=003ceb10
eip=76f8fc62 esp=003ce9e4 ebp=003cea38 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!NtMapViewOfSection+0x12:
76f8fc62 83c404 add esp,4
0:000> .loadby sos clr
------------------------------------------------------------------------------------
我的问题是:难道我要每次都输这么一大堆命令才能成功的.loadby sos clr吗? 为什么直接运行会失败呢? 网上搜了一下,好多人也遇到这样的问题,但是没看到彻底的解决方案。这个是windbg版本的问题,还是某个bug?
谢谢。
Re: windbg的.loadby sos clr第一次总不成功,必须在加载clrjit以后才能运行,为何?
格蠹老雷
2014-06-24, 21:46 下午
是正常现象。因为第一次执行.loadby命令时,新创建的进程还停在初始断点处,此时还没有加载clr.dll
如果不需要调试进程的初始化过程,可以.net程序启动后,再把windbg附加上去,就没有这样的问题了