上一页 1 ··· 3 4 5 6 7
摘要: 简介 "终结"一般被分为确定性终结(显示清除)与非确定性终结(隐式清除) 确定性终结 提供给开发人员一个显式清理的方法,比如try-finally,using,IDisposable。 非确定性终结 提供一个注册的入口,只知道会执行,但不清楚什么时候执行。比如析构函数。 为什么需要终结机制? 首先纠 阅读全文
posted @ 2024-10-11 15:52 叫我安不理 阅读(2591) 评论(13) 推荐(21)
摘要: 简介 在大多数调试会话中,首先需要检查的项目就是分析应用程序的状态。在确认程序的问题是某种无效状态造成的,我们便需要分析程序是如何变成无效状态的。那么在分析过程中,需要为我们深入了解对象的各种审查方法 内存转储 内存转储非常底层,是从内存地址上观察地址上的内容,常常使用d系列命令观察 对象的“类型显 阅读全文
posted @ 2024-10-08 13:49 叫我安不理 阅读(206) 评论(0) 推荐(1)
摘要: 简介 sosex是sos的一个拓展,主要目的是将一些繁琐的排查过程脚本化,比如探测死锁,设置断点等。更加方便快捷协助我们排查问题. 比较可惜的是,在.net core中不可用,作者已经不更新了。 更多的命令可以使用!sosex.help 查看帮助 断点加强 原来的bp命令操作起来优点麻烦,还有区分j 阅读全文
posted @ 2024-09-29 17:31 叫我安不理 阅读(173) 评论(0) 推荐(0)
摘要: 简介 代码审查就是观察代码,代码形态分为三种C#代码>IL代码》汇编代码。通过代码审查,可以从原始代码的字节流中推测出逻辑详情 高级调试本质上属于逆向分析,更多的是以汇编为主。 反汇编代码 u(unassemble) 命令u把字节流反汇编为汇编指令 还有一个变种ub,uf。 u是向下反汇编,ub是向 阅读全文
posted @ 2024-09-29 14:02 叫我安不理 阅读(171) 评论(0) 推荐(0)
摘要: 简介 高级调试过程中,与线程与线程栈是打交道特别多的。因此如何查看线程与线程栈就显得至关重要了 查看线程 !Threads 使用 !t/!Threads 命令获取所有托管线程 含义 ThreadCount 线程数量 UnstartedThread 线程创建,但未开始的 BackgroundThrea 阅读全文
posted @ 2024-09-27 18:01 叫我安不理 阅读(226) 评论(0) 推荐(0)
摘要: 前言 环境:.NET 8.0 系统:Windows11 参考资料:《CLR via C#》, 《.Net Core底层入门》,《.NET 内存管理宝典》 栈空间与堆空间 程序运行过程中,需要保存各种各样的数据。数据根据它们的生命周期从不同位置分配,每个线程都有独立的栈空间(Stack Space)。 阅读全文
posted @ 2024-09-09 09:05 叫我安不理 阅读(282) 评论(0) 推荐(2)
摘要: 前言 环境:.NET 8.0 系统:Windows11 参考资料:CLR via C#, .Net Core底层入门 https://andreabergia.com/blog/2023/05/error-handling-patterns/ 异常报告的四种方式 程序在执行过程中可能会遇到很多意外的 阅读全文
posted @ 2024-09-03 10:56 叫我安不理 阅读(569) 评论(0) 推荐(1)
摘要: 环境变量 .Net Core 8.0 Windows 11 64位 内存布局 引用类型 在.NET中,数据会按照类型分为不同的对象,对于引用类型的实例,由一个对象标头(Object Header)和方法表(MethodTable)以及字段值组成 对象标头(Object Header):按照CLR的描 阅读全文
posted @ 2024-08-27 11:20 叫我安不理 阅读(620) 评论(0) 推荐(1)
上一页 1 ··· 3 4 5 6 7