当我们要在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:\inetpub\wwwroot\Default.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:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\e22c2559\92c7e946\App_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:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.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

Debug Diagnostics Tool创建.Net异常转储并用Windbg分析异常的更多相关文章

  1. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常[WCF]

    未处理System.TypeInitializationException  HResult=-2146233036  Message=“System.ServiceModel.Diagnostics ...

  2. 使用Debug Diagnostic Tool排除内存泄漏故障

    在我之前的博文中(SQL Server内存泄漏),我解释了如何使用“!heap”命令识别哪个模块泄漏了内存.有时我们使用“!d”命令来找到模型或者使用搜索内存命令(s)不能通过显示内存找到原因. 在这 ...

  3. 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载

    文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服务器计算机上. 然后,远程计算机可以使用 FTP ...

  4. 创建FTP的Site并用C#进行文件的上传下载

    创建FTP的Site并用C#进行文件的上传下载 文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服 ...

  5. ArrayList的ConcurrentModificationException异常和多线程下的异常

    一.ConcurrentModificationException ArrayList源码看为什么出现异常: public class ArrayList<e> extends Abstr ...

  6. 十二、jdk工具之jcmd介绍(堆转储、堆分析、获取系统信息、查看堆外内存)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  7. Java异常(一)Java异常简介及其框架

    Java异常(一)Java异常简介及其框架 概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机 ...

  8. Java之异常机制(1) - 高效处理异常

    Java开发人员做出的有关架构的最重要的决定之一便是如何使用Java异常模型.Java异常处理成为社区中讨论最多的话题之一.一些人认为Java语 言中的已检查异常(Checked Exceptions ...

  9. NullPointerException异常的原因及java异常??

    所谓空指针异常,是因为用空(null)去调用属性或方法.   null表示没有这个对象,既然没有这个对象,那么去调用他的属性和方法,就会报异常.   <--主要有以下几种原因:   1.使用了未 ...

随机推荐

  1. 写一个Android输入法02——候选窗、转换

    上一篇介绍了完成Android输入法的最小化步骤,它只能将按键对应的字符上屏.一般的东亚语言都有一个转换的过程,比如汉语输入拼音,需要由拼音转成汉字再上屏.本文将在前文基础上加入完成转换过程所必需的候 ...

  2. CSS效果:图片切换

    HTML: <html lang="en"> <head> <meta charset="UTF-8"> <meta ...

  3. git rm 与 git reset

    https://www.cnblogs.com/sunshine-xin/articles/3521481.html 1. git rm --cached file will remove the f ...

  4. SP839 Optimal marks(最小割)

    SP839 Optimal marks(最小割) 给你一个无向图G(V,E). 每个顶点都有一个int范围内的整数的标记. 不同的顶点可能有相同的标记.对于边(u,v),我们定义Cost(u,v)= ...

  5. 「十二省联考 2019」异或粽子——tire树+堆

    题目 [题目描述] 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 $n$ 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 $1$ 到 $n$.第 $i$ 种馅 ...

  6. cuda测试二维block的使用

    #include "cuda_runtime.h" #include <stdio.h> #include <stdlib.h> #include < ...

  7. CF567E President and Roads

    \(\color{#0066ff}{ 题目描述 }\) 给出一个有向图,从起点走到终点(必须走最短路),问一条边是否一定会被经过,如果不经过它,可以减小它的多少边权使得经过它(边权不能减少到0) \( ...

  8. 「洛谷5017」「NOIP2018」摆渡车【DP,经典好题】

    前言 在考场被这个题搞自闭了,那个时候自己是真的太菜了.qwq 现在水平稍微高了一点,就过来切一下这一道\(DP\)经典好题. 附加一个题目链接:[洛谷] 正文 虽然题目非常的简短,但是解法有很多. ...

  9. redis修改密码和更改端口

    Liunx下redis修改密码和更改端口 redis一个实例就是一个节点,每个节点分配一个端口号,每个节点对应一个redis.conf配置文件. redis默认配置的端口号是6379,假设现在要多配置 ...

  10. IO文件夹拷贝(文件内含有文件和文件夹)

    /** * 文件夹拷贝(文件内含有文件和文件夹) * * @param src * @param des */ private static void copy(String src, String ...