zoukankan      html  css  js  c++  java
  • Debug Diagnostics Tool创建.Net异常转储并用Windbg分析异常

    当我们要在IIS PRD环境下分析异常,并且对问题毫无头绪,又没有权限直接上打Log的代码。这个时候就是Debug Diagnostics Tool & Windbg大显神威的时候了。

    Debug Diagnostics Tool

    安装方法各位大侠请自行百度,重点说一下抓转储文件。

    一开始是选择抓取的程序,我当然要抓IIS的应用程序池喽。。。

    设定要抓取的文件个数,点击Exceptions可以设定在发生什么异常时候抓取。

    我当然是要抓高大上的.Net异常喽。。。

    接下来是设置保存的位置。

    为了演示随便搞了一个会抛出异常的页面:

    看一下生成的转储文件长个毛样子哇:

     Windbg

    下面该windbg出手了,这个网上教程比较多,直接说重点了:

    ~#:查看问题线程,~线程id s:切换线程,!clrstack -l:查看当前堆栈并打印局部变量。

    0:023> ~#
    . 23  Id: 790.1280 Suspend: 1 Teb: 000007ff`ffec6000 Unfrozen
          Start: clr!Thread::intermediateThreadProc (000007fe`ef57dafc)
          Priority: 0  Priority class: 32  Affinity: f
    0:023> ~23 s
    KERNELBASE!RaiseException+0x39:
    000007fe`fdfaaaad 4881c4c8000000  add     rsp,0C8h
    0:023> !clrstack -l
    OS Thread Id: 0x1280 (23)
            Child SP               IP Call Site
    000000000d3ad610 000007fefdfaaaad [FaultingExceptionFrame: 000000000d3ad610]
    000000000d3adb60 000007fe8fe415cc *** WARNING: Unable to verify checksum for App_Web_ix1d1jtk.dll
    _Default.Page_Load(System.Object, System.EventArgs) [c:inetpubwwwrootDefault.aspx.cs @ 17]
        LOCALS:
            0x000000000d3adb80 = 0x00000000fff4d4e8
            0x000000000d3adb88 = 0x0000000000000000
            0x000000000d3adb8c = 0x0000000000000001

    呵呵,0x00000000fff4d4e8这个地址就是我们代码里面随便new的对象:sssssss奥,来DO一下看看这个对象吧:

    0:023> !do 0x00000000fff4d4e8
    Name:        TestStatic

    MethodTable: 000007fe8fe2c3d8
    EEClass:     000007fe8fe18bc8
    Size:        24(0x18) bytes
    File:        C:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Files oote22c255992c7e946App_Web_ix1d1jtk.dll
    Fields:
                  MT    Field   Offset                 Type VT     Attr            Value Name
    000007feee4f0e08  400000d       28        System.String  0   static 0000000400031900 abc


    再来看一下他的字符串成员abc

    0:023> !do  0000000400031900
    Name:        System.String
    MethodTable: 000007feee4f0e08
    EEClass:     000007feede14860
    Size:        48(0x30) bytes
    File:        C:WindowsMicrosoft.NetassemblyGAC_64mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll
    String:      11111111111
    Fields:
                  MT    Field   Offset                 Type VT     Attr            Value Name
    000007feee4f3980  40000ab        8         System.Int32  1 instance               11 m_stringLength
    000007feee4f20f0  40000ac        c          System.Char  1 instance               31 m_firstChar
    000007feee4f0e08  40000ad       18        System.String  0   shared           static Empty

  • 相关阅读:
    SQL Server 内存管理在64位时代的改变
    SQL Server 的内存分类
    SQL Server sp_configure 控制内存使用
    SQL Server 内存使用量下降问题
    SQL Server 与 Windows 内存使用上的约定
    MYSQL 为表指定文件位置 data directory
    SQL Server 与内存相关的术语
    SQL Server 为索引启动硬件加速(分区)的 2 方法
    SQL Server 提高创建索引速度的 2 个方法
    SQL Server 中索引的禁用与删除
  • 原文地址:https://www.cnblogs.com/12taotie21/p/4520779.html
Copyright © 2011-2022 走看看