Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

WinDbg

帖子发起人: iuikjasd   发起时间: 2014-06-24 16:19 下午   回复: 1

Print Search
帖子排序:    
   2014-06-24, 16:19 下午
iuikjasd 离线,最后访问时间: 2014/6/24 8:05:30 iuikjasd

发帖数前500位
注册: 2014-06-24
发 贴: 3
windbg的.loadby sos clr第一次总不成功,必须在加载clrjit以后才能运行,为何?
Reply Quote
我用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?

谢谢。

IP 地址: 已记录   报告
   2014-06-24, 21:46 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: windbg的.loadby sos clr第一次总不成功,必须在加载clrjit以后才能运行,为何?
Reply Quote
是正常现象。因为第一次执行.loadby命令时,新创建的进程还停在初始断点处,此时还没有加载clr.dll
如果不需要调试进程的初始化过程,可以.net程序启动后,再把windbg附加上去,就没有这样的问题了

IP 地址: 已记录   报告
高端调试 » 软件调试 » WinDbg » Re: windbg的.loadby sos clr第一次总不成功,必须在加载clrjit以后才能运行,为何?

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.