一、简介    这是我的《Advanced.NetDebugging》这个系列的第七篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第五章,这一章主要讲的是从根本上认识托管堆和垃圾回收。软件系统的内存管理方式有两种,第一种是手动管理内存,这种方式容易产生一些问题产生,比如:悬空指针、重复释放,或者内存泄漏等;第二种是自动内存管理,比如:java平台、.NET平台。尽管GC能帮助开发人员简化开发工作,让他们更关注系统的业务功能实现。如果我们对GC运作原理了解更深入一些,也可以让我们避免在垃圾回收环境中出现的问题。高级调试会涉及很多方面的内容,你对.NET基础知识掌握越全面、细节越底层,调试...

  mtx1zrHk0xyQ   18天前   63   0   0 .NET

一、简介     这是我的《 Advanced.NetDebugging》这个系列的第六篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第四章。这章主要讲的是程序集加载器,比如:CLR加载器简介、简单的程序集加载故障、加载上下文故障、互用性与DllNotFoundException和轻量级代码生成的调试。有了这章内容的学习,对于CLR如何加载程序集,加载的上下文和算法会有一个充分的了解。当然,有关程序集加载的错误也会有所调试和验证。高级调试会涉及很多方面的内容,你对.NET基础知识掌握越全面、细节越底层,调试成功的几率越大,当我们遇到各种奇葩问题的时候才不会手足无措。     如果在没有...

  mtx1zrHk0xyQ   2024年04月03日   31   0   0 .NET

一、介绍    这是我的《 Advanced.NetDebugging》这个系列的第五篇文章。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。上一篇我们了解了一些调.NET框架中必要的概念,比如:内存转储、值类型转储、引用类型转储、数组转储和异常转储等,我们既能做到知其然,又能做到眼见为实,知其所以然,对我们分析.NET程序有很大的帮助。今天这篇文章主要涉及的内容是线程的操作、代码的审查和诊断命令等。 SOSEX扩展的内容我就省略了,因为我这个系列的是基于.NET8版本来写的,SOSEX是基于.NETFramework版本的,如果大家想了解其内容,可以查看我的【高级调试】...

  mtx1zrHk0xyQ   2024年03月21日   46   0   0 .NET

一、介绍     这是我的《 Advanced.NetDebugging》这个系列的第四篇文章。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。由于内容太多,故原书的第三章内容我分两篇文章来写。上一篇我们了解了一些调试技巧,比如:单步调试、下断点、过程调试等,这篇文章主要涉及的内容是对象的转储,内存的转储,值类型的转储,引用类型的转储、数组的转储、异常的转储等。 第一次说到“转储”,可能大家不知道什么意思,其实就是把我们想要的内容输出出来或者说是打印出来,方便我们分析问题。 SOSEX扩展的内容我就省略了,因为我这个系列的是基于.NET8版本来写的,SOSEX是基于.NE...

  mtx1zrHk0xyQ   2024年03月08日   49   0   0 .NET

一、简介     这是我的《 Advanced.NetDebugging》这个系列的第三篇文章。这个系列的每篇文章写的周期都要很长,因为每篇文章都是原书的一章内容(太长的就会分开写)。再者说,原书写的有点早,有些内容还是需要修正的,调试每个案例,这都是需要时间的。今天这篇文章的标题虽然叫做“基本调试任务”,但是这章的内容还是挺多的。我本来想用一篇文章把这个章节写完,我发现是不可能的,于是就分“上“和”下”用两篇来写。既然,我们要调试我们的.Net应用程序,那必须掌握一些调试技巧、方法和工具。我们习惯了使用VisualStudioIDE的调试技巧,比如:单步调试、下断点、过程调试等,但是,有些时...

  mtx1zrHk0xyQ   2024年03月04日   48   0   0 .NET

一、简介    今天是《Net高级调试》的第四篇文章。到今天为止,也有三篇文章了,对Windbg也有初步的认识了,当然,一个工具流畅、熟练的使用,对于我们调试Net程序是至关重要的。在前几篇文章的基础上,我们这篇文章主要介绍一些和使用Windbg有关的命令和操作。就我个人而言,第一次接触这个东西,还是挺难的,以前从来没有用过Windbg,用的最多的就是VisualStudio的调试功能。不怕大家笑话,如何通过Windbg加载一个exe,我都不知道,更不要谈加载DUMP文件。我看第一遍视频的时候,也不知道说了个啥,命令的执行,调试的开始,都感觉是一头雾水,似懂非懂,自己一实操,总是得不到别人调试...

  mtx1zrHk0xyQ   2023年12月31日   21   0   0 .NET

一、简介     今天是《Net高级调试》的第五篇文章。今天这篇文章开始介绍如何在托管方法和非托管方法设置断点,我们要想调试程序,必须掌握调试的一些命令,动态调试的命令,我们在上一篇文章已经讲过了。光有命令也是不行的,要让这些调试命令有用,必须可以在方法上设置断点,然后,再使用调试命令,才能完成我们的调试任务。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现,我这是第三遍。      如果在没有说明的情况下,所有代码的测试环境都是NetFramewok4.8,但是,有时候为了查看源码,可能需要使...

  mtx1zrHk0xyQ   2023年12月31日   20   0   0 .NET

一、简介      今天是《Net高级调试》的第六篇文章。记得我刚接触Net框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力。当然这些见解都是书本上的,并没有做到眼见为实,所以总是有些东西说不清楚。今天,我们就好好的说说C的类型,是从内存级别、从底层来说一下值类型、引用类型到底是什么,它们在内存中的形态,还有也说说数组的内存形态,如何内部布局的,以及我们如何查找由未捕捉的异常引起的程序崩溃。这些都是基础的,如果这些掌握不好,以后的高级调试的道路,也不好走。自从我过了这一关,很多东西理解起来,比较透彻了,但是,还必须努力。当然了,第一次看视频或者看书,...

  mtx1zrHk0xyQ   2023年12月31日   17   0   0 .NET

一、简介    今天是《Net高级调试》的第七篇文章。上一篇文章我们说了值类型,引用类型,数组等的内存表现形式。有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们的结构组成是什么样子的,对我们调试程序是更有帮助的。今天,我们要说一些和线程有关的话题,虽然和线程相关,但是不是多线程的知识,不是线程安全的知识。今天我们讨论的是如何查看线程,它的表现形式,以及线程的调用栈,调用栈,又分为托管线程的调用栈和非托管线程的调用栈,这些也是我们高级调试必须掌握的。有了这些基础,我们就知道了程序的开始端点,调试的起点我们就找到了。虽然这些都是基础,如果这些掌握不好,以后的高级调试...

  mtx1zrHk0xyQ   2023年12月31日   22   0   0 .NET

一、简介     今天是《Net高级调试》的第八篇文章。这篇文章设计的内容挺多的,比如:如何查看方法的汇编代码,如何获取方法的描述符,对象同步块的转储,对象方法表的转储,托管堆和垃圾回收器信息的转储,CLR的版本,GC模式,等等,内容挺多的。内容虽然挺多,但是这些都是高级调试的基础。虽然这些都是基础,如果这些掌握不好,以后的高级调试的道路,也不好走。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现。      如果在没有说明的情况下,所有代码的测试环境都是NetFramewok4.8,但是,有时...

  mtx1zrHk0xyQ   2023年12月31日   16   0   0 .NET

一、介绍     今天是《Net高级调试》的第九篇文章。这篇文章设计的内容挺多的,比如:扩展的断点支持,如何查找元数据,栈回溯,对象检查,死锁检测等等,内容挺多的。功能特别强大,使用特别方便, 但是需要说明一点,这些功能不是SOS的功能,是SOSEX的扩展功能,但是,这一系列功能只是支持NetFramework,在NetCore跨平台版本是不支持的。虽然这些都是基础,如果这些掌握不好,以后的高级调试的道路,也不好走。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现。      如果在没有说明的情...

  mtx1zrHk0xyQ   2023年12月31日   17   0   0 .NET

一、简介     今天是《Net高级调试》的第十篇文章。说起来,高级调试,调试的内容还是挺多的,技巧也不少,但是,要想做一个合格的高级调试人员,还需要掌握如何调试动态生成的IL代码。今天要探讨的高级调试的技巧是如何调试通过Emit动态生成IL代码。可能有人会问,我们不是编写C代码,或者是VB.Net代码吗?怎么还要动态生成IL代码,这些工作不是编译器做的吗?当然,一般情况是这样的,但是,当我们编写一些高性能的框架的时候,使用IL代码编写也是常事。既然也可以直接使用IL编写代码,那对它的调试也是少不了的,调试机会虽然很少,具有这个本领,等遇到这样的问题,就不至于慌乱了,俗话说的好:艺多不压身。当...

  mtx1zrHk0xyQ   2023年12月31日   17   0   0 .NET

一、简介     今天是《Net高级调试》的第十一篇文章,这篇文章来的有点晚,因为,最近比较忙,就没时间写文章了。现在终于有点时间,继续开始我们这个系列。这篇文章我们主要介绍托管堆的架构,对象的分配机制,我们如何查找在托管堆上的对象,我学完这章,很多以前很模糊的概念,现在很清晰了,知道了对象代的分配,大对象堆和小对象堆的结构,了解了对象的生命周期,这些是Net框架的底层,了解更深,对于我们调试更有利。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现。      如果在没有说明的情况下,所有代码的...

  mtx1zrHk0xyQ   2023年12月31日   17   0   0 .NET

一、简介     今天是《Net高级调试》的第十一篇文章,这篇文章来的有点晚,因为,最近比较忙,就没时间写文章了。现在终于有点时间,继续开始我们这个系列。这篇文章我们主要介绍托管堆的架构,对象的分配机制,我们如何查找在托管堆上的对象,我学完这章,很多以前很模糊的概念,现在很清晰了,知道了对象代的分配,大对象堆和小对象堆的结构,了解了对象的生命周期,这些是Net框架的底层,了解更深,对于我们调试更有利。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现。      如果在没有说明的情况下,所有代码的...

  mtx1zrHk0xyQ   2023年12月01日   19   0   0 .NET

一、简介     今天是《Net高级调试》的第十篇文章。说起来,高级调试,调试的内容还是挺多的,技巧也不少,但是,要想做一个合格的高级调试人员,还需要掌握如何调试动态生成的IL代码。今天要探讨的高级调试的技巧是如何调试通过Emit动态生成IL代码。可能有人会问,我们不是编写C代码,或者是VB.Net代码吗?怎么还要动态生成IL代码,这些工作不是编译器做的吗?当然,一般情况是这样的,但是,当我们编写一些高性能的框架的时候,使用IL代码编写也是常事。既然也可以直接使用IL编写代码,那对它的调试也是少不了的,调试机会虽然很少,具有这个本领,等遇到这样的问题,就不至于慌乱了,俗话说的好:艺多不压身。当...

  mtx1zrHk0xyQ   2023年11月22日   18   0   0 .NET

一、介绍     今天是《Net高级调试》的第九篇文章。这篇文章设计的内容挺多的,比如:扩展的断点支持,如何查找元数据,栈回溯,对象检查,死锁检测等等,内容挺多的。功能特别强大,使用特别方便, 但是需要说明一点,这些功能不是SOS的功能,是SOSEX的扩展功能,但是,这一系列功能只是支持NetFramework,在NetCore跨平台版本是不支持的。虽然这些都是基础,如果这些掌握不好,以后的高级调试的道路,也不好走。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现。      如果在没有说明的情...

  mtx1zrHk0xyQ   2023年11月17日   17   0   0 .NET

一、简介     今天是《Net高级调试》的第八篇文章。这篇文章设计的内容挺多的,比如:如何查看方法的汇编代码,如何获取方法的描述符,对象同步块的转储,对象方法表的转储,托管堆和垃圾回收器信息的转储,CLR的版本,GC模式,等等,内容挺多的。内容虽然挺多,但是这些都是高级调试的基础。虽然这些都是基础,如果这些掌握不好,以后的高级调试的道路,也不好走。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现。      如果在没有说明的情况下,所有代码的测试环境都是NetFramewok4.8,但是,有时...

  mtx1zrHk0xyQ   2023年11月17日   13   0   0 .NET

一、简介    今天是《Net高级调试》的第七篇文章。上一篇文章我们说了值类型,引用类型,数组等的内存表现形式。有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们的结构组成是什么样子的,对我们调试程序是更有帮助的。今天,我们要说一些和线程有关的话题,虽然和线程相关,但是不是多线程的知识,不是线程安全的知识。今天我们讨论的是如何查看线程,它的表现形式,以及线程的调用栈,调用栈,又分为托管线程的调用栈和非托管线程的调用栈,这些也是我们高级调试必须掌握的。有了这些基础,我们就知道了程序的开始端点,调试的起点我们就找到了。虽然这些都是基础,如果这些掌握不好,以后的高级调试...

  mtx1zrHk0xyQ   2023年11月12日   20   0   0 .NET

一、简介      今天是《Net高级调试》的第六篇文章。记得我刚接触Net框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力。当然这些见解都是书本上的,并没有做到眼见为实,所以总是有些东西说不清楚。今天,我们就好好的说说C的类型,是从内存级别、从底层来说一下值类型、引用类型到底是什么,它们在内存中的形态,还有也说说数组的内存形态,如何内部布局的,以及我们如何查找由未捕捉的异常引起的程序崩溃。这些都是基础的,如果这些掌握不好,以后的高级调试的道路,也不好走。自从我过了这一关,很多东西理解起来,比较透彻了,但是,还必须努力。当然了,第一次看视频或者看书,...

  mtx1zrHk0xyQ   2023年11月12日   38   0   0 .NET

一、简介    从今天开始一个长系列,Net高级调试的相关文章,我自从学习了之后,以前很多模糊的地方现在很清楚了,原来自己的功力还是不够,所以有很多不明白,通过学习Net高级调试,眼前豁然开朗,茅塞顿开。其实,刚开始要学习《Net高级调试》,还是很是很困难的,很多工具不会用,又不知道如何调试,痛苦的又很多次想放弃,但是,最终还是坚持下来,收获也不小。    既然坚持下来了,我就把学习的过程记录下来,也许以后自己的能用的到,可以方便查询。或许,有其他人也有同样的困扰,或许可以在我这里得到一些帮助,有帮助我当然很开心。当然,Net高级调试的路还很远,我也是刚起步,不足之处太多,也希望大家原谅,有不...

  mtx1zrHk0xyQ   2023年11月06日   32   0   0 .NET
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~