刷新
Advanced .Net Debugging 7:托管堆与垃圾收集

一、简介 这是我的《Advanced .Net Debugging》这个系列的第七篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第五章,这一章主要讲的是从根本上认识托管堆和垃圾回收。软件系统的内存管理方式有两种,第一种是手动管理内存,这种方式容易产生一些问题产生,比如:悬空指针、重复释放,或 ...

Advanced .Net Debugging 6:程序集加载器

一、简介 这是我的《Advanced .Net Debugging》这个系列的第六篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第四章。这章主要讲的是程序集加载器,比如:CLR 加载器简介、简单的程序集加载故障、加载上下文故障、互用性与 DllNotFoundException 和轻量级代码 ...

Advanced .Net Debugging 5:基本调试任务(线程的操作、代码审查、CLR内部的命令、诊断命令和崩溃转储文件)

一、介绍 这是我的《Advanced .Net Debugging》这个系列的第五篇文章。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。上一篇我们了解了一些调.NET 框架中必要的概念,比如:内存转储、值类型转储、引用类型转储、数组转储和异常转储等,我们既能做到知其然,又能做 ...

Advanced .Net Debugging 4:基本调试任务(对象检查:内存、值类型、引用类型、数组和异常的转储)

一、介绍 这是我的《Advanced .Net Debugging》这个系列的第四篇文章。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。由于内容太多,故原书的第三章内容我分两篇文章来写。上一篇我们了解了一些调试技巧,比如:单步调试、下断点、过程调试等,这篇文章主要涉及的内容是 ...

Advanced .Net Debugging 3:基本调试任务(调试目标、符号、控制调试目标执行和设置断点)

一、简介 这是我的《Advanced .Net Debugging》这个系列的第三篇文章。这个系列的每篇文章写的周期都要很长,因为每篇文章都是原书的一章内容(太长的就会分开写)。再者说,原书写的有点早,有些内容还是需要修正的,调试每个案例,这都是需要时间的。今天这篇文章的标题虽然叫做“基本调试任务” ...

Net 高级调试之十一:托管堆布局架构和对象分配机制

一、简介 今天是《Net 高级调试》的第十一篇文章,这篇文章来的有点晚,因为,最近比较忙,就没时间写文章了。现在终于有点时间,继续开始我们这个系列。这篇文章我们主要介绍托管堆的架构,对象的分配机制,我们如何查找在托管堆上的对象,我学完这章,很多以前很模糊的概念,现在很清晰了,知道了对象代的分配,大对 ...

Net 高级调试之十:轻量级代码生成的调试

一、简介 今天是《Net 高级调试》的第十篇文章。说起来,高级调试,调试的内容还是挺多的,技巧也不少,但是,要想做一个合格的高级调试人员,还需要掌握如何调试动态生成的IL代码。今天要探讨的高级调试的技巧是如何调试通过 Emit 动态生成 IL 代码。可能有人会问,我们不是编写 C# 代码,或者是 V ...

Net 高级调试之九:SOSEX 扩展命令介绍

一、介绍 今天是《Net 高级调试》的第九篇文章。这篇文章设计的内容挺多的,比如:扩展的断点支持,如何查找元数据,栈回溯,对象检查,死锁检测等等,内容挺多的。功能特别强大,使用特别方便,但是需要说明一点,这些功能不是 SOS 的功能,是 SOSEX 的扩展功能,但是,这一系列功能只是支持 Net F ...

Net 高级调试之八:代码审查及杂项命令

一、简介 今天是《Net 高级调试》的第八篇文章。这篇文章设计的内容挺多的,比如:如何查看方法的汇编代码,如何获取方法的描述符,对象同步块的转储,对象方法表的转储,托管堆和垃圾回收器信息的转储,CLR 的版本,GC 模式,等等,内容挺多的。内容虽然挺多,但是这些都是高级调试的基础。虽然这些都是基础, ...

Net 高级调试之七:线程操作相关命令介绍

一、简介 今天是《Net 高级调试》的第七篇文章。上一篇文章我们说了值类型,引用类型,数组等的内存表现形式。有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们的结构组成是什么样子的,对我们调试程序是更有帮助的。今天,我们要说一些和线程有关的话题,虽然和线程相关,但是不是 ...

Net 高级调试之六:对象检查之值类型、引用类型、数组和异常的转储

一、简介 今天是《Net 高级调试》的第六篇文章。记得我刚接触 Net 框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力。当然这些见解都是书本上的,并没有做到眼见为实,所以总是有些东西说不清楚。今天,我们就好好的说说 C# 的类型,是从内存级别、从底层来说 ...

Net 高级调试之五:如何在托管函数上设置断点

一、简介 今天是《Net 高级调试》的第五篇文章。今天这篇文章开始介绍如何在托管方法和非托管方法设置断点,我们要想调试程序,必须掌握调试的一些命令,动态调试的命令,我们在上一篇文章已经讲过了。光有命令也是不行的,要让这些调试命令有用,必须可以在方法上设置断点,然后,再使用调试命令,才能完成我们的调试 ...

Net 高级调试之四:Windbg 动态调试

一、简介 今天是《Net 高级调试》的第四篇文章。到今天为止,也有三篇文章了,对 Windbg 也有初步的认识了,当然,一个工具流畅、熟练的使用,对于我们调试 Net 程序是至关重要的。在前几篇文章的基础上,我们这篇文章主要介绍一些和使用 Windbg 有关的命令和操作。就我个人而言,第一次接触这个 ...

Net 高级调试之一:开始认识一些调试工具

一、简介 从今天开始一个长系列,Net 高级调试的相关文章,我自从学习了之后,以前很多模糊的地方现在很清楚了,原来自己的功力还是不够,所以有很多不明白,通过学习 Net 高级调试,眼前豁然开朗,茅塞顿开。其实,刚开始要学习《Net 高级调试》,还是很是很困难的,很多工具不会用,又不知道如何调试,痛苦 ...

一文了解.Net的CLR、GC内存管理

博主头像 一文了解.Net的CLR、GC内存管理 微软官方文档对内存管理和CLR的概述 什么是托管代码? 托管代码就是执行过程交由运行时管理的代码。 在这种情况下,相关的运行时称为公共语言运行时 (CLR),不管使用的是哪种实现(例如 Mono、.NET Framework 或 .NET Core/.NET ...

使用WinDbg调试程序异常和死锁等问题

博主头像 一、在使用WinDbg调试之前,我们先使用VS的调试功能 1、文件 -> 打开 -> 文件 -> 打开Dump文件 2、调试 -> 选项 -> 调试 -> 符号 -> 添加该应用的.pdb所在的文件夹 3、使用 仅限托管 进行调试 正常情况下会执行到抛出异常的位置,并且显示异常详情。 二、WinDb ...

为什么Java有GC调优而没听说过有CLR的GC调优?

博主头像 ## 前言 在很多的场合我都遇到过一些群友提这样的一些问题: 为什么Java有GC调优而CLR没有听说过有GC调优呢? 到底是Java的JVM GC比较强还是C#使用的.NET CLR的GC比较强呢? 其实业内已经有几位大佬的高赞文章和大家分享一下,主要讨论JVM和CLR还有GC调优,今天就借用大 ...

一文带你吃透CLR垃圾回收机制

前言 今天我们来共同学习一下CLR的垃圾回收机制,这对我们写出健壮性的代码很有帮助,也许有人会认为多此一举,认为垃圾回收交给CLR就行,我不用关心这个,诚然,大多数情况下是这样的,但是,我们今天讨论的是程序的健壮性以及能够快速定位那些神出鬼没的问题。 一个例子 static void Main(st ...