net 高级调试之八:代码审查及杂项命令-编程思维

一、简介    今天是《Net 高级调试》的第八篇文章。这篇文章设计的内容挺多的,比如:如何查看方法的汇编代码,如何获取方法的描述符,对象同步块的转储,对象方法表的转储,托管堆和垃圾回收器信息的转储,CLR 的版本,GC 模式,等等,内容挺多的。内容虽然挺多,但是这些都是高级调试的基础。虽然这些都是基础,如果这些掌握不好,以后的高级调试的道路,也不好走。当然了,第一次看视频或者看书,是很迷糊的,

net 高级调试之七:线程操作相关命令介绍-编程思维

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

net 高级调试之六:对象检查之值类型、引用类型、数组和异常的转储-编程思维

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

net 高级调试之五:如何在托管函数上设置断点-编程思维

一、简介    今天是《Net 高级调试》的第五篇文章。今天这篇文章开始介绍如何在托管方法和非托管方法设置断点,我们要想调试程序,必须掌握调试的一些命令,动态调试的命令,我们在上一篇文章已经讲过了。光有命令也是不行的,要让这些调试命令有用,必须可以在方法上设置断点,然后,再使用调试命令,才能完成我们的调试任务。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就

net 高级调试之四:windbg 动态调试-编程思维

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

net 高级调试之三:类型元数据介绍(同步块表、类型句柄、方法描述符等)-编程思维

一、简介    今天是《Net 高级调试》的第三篇文章,压力还是不小的。上一篇文章,我们浅浅的谈了谈 CLR 和 Windows 加载器是如何加载 Net 程序集的,如何找到程序的入口点的,有了前面的基础,我们今天看一点更详细的东西。既然 Windows 操作系统已经加载了 CLR,初始化了应用程序域,加载了我们的 Net 程序,那我们就看看Net 类型在内存中的具体样子。这一篇文章还是有一点难

net 高级调试之二:clr和windows加载器及应用程序域介绍-编程思维

一、简介    今天是 Net 高级调试的第二篇文章,第一篇文章记录了自己学习 Net 高级调试的第一步,认识一些调试工具,有了工具的倚仗,我们开始仗剑走天涯了,开始Net 高级调试正式的征程了。我先说一下,我的文章,【调试测试】这部分一般分为两个部分,第一部分是要用到的所有测试代码样例,也为大家提供方便,我第一次做测试还是走了不少弯路的。第二部分,就是使用 Windbg 调试器调试代码的部分,

记一次 .net 某电力系统 内存暴涨分析-编程思维

一:背景 1. 讲故事 前些天有位朋友找到我,说他生产上的程序有内存暴涨情况,让我帮忙看下怎么回事,最简单粗暴的方法就是让朋友在内存暴涨的时候抓一个dump下来,看一看大概就知道咋回事了。 二:Windbg 分析 1. 到底是谁吃了内存 这个问题说的再多也不为过,一定要看清楚这个程序是如何个性化发展的,可以使用 !address -summary 命令。 0:000> !address

windbg常用命令-编程思维

摘自    http://www.cnblogs.com/Clingingboy/archive/2013/03/26/2983166.html +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #重要说明 (1) windbg命令分为标准命令,元命令和扩展命令。      标准命令提供最基本的调试功能,不区分大小写。

windbg调试dump转储文件及程序崩溃时自动创建转储文件的方式-编程思维

通过WinDbg分析转储文件 在调试过程中回遇到一些很奇怪的问题,编译器调试无法正常定位问题,所以需要WinDbg,这篇博客是对照多篇文档的简易的入门整理 一、必备知识 1.1、下载WinDbg 微软文档 下载 Windows 调试工具 - WinDbg - Windows drivers | Microsoft Learn WinDbg Preview 是 WinDbg 的新版本。WinDbg

windbg基础篇--window api-编程思维

User32.dll,kernel32.dll,shell32.dll,gdi32.dll,rpcrt4.dll,comctl32.dll,advapi32.dll,version.dll等dll代表了Win32 API的基本提供者;Win32 API中的所有调用最终都转向了ntdll.dll,再由它转发至ntoskrnl.exe。ntdll.dll是本机 API用户模式的终端。真正的接口在nt

windbg-临界区-编程思维

关键部分可以通过 ! ntsdexts 扩展、 ! critsec 扩展、 ! .Cs 扩展和 dt (显示类型) 命令显示。 ! Ntsdexts extension 显示与当前进程相关联的关键部分的列表。 如果使用了 -v 选项,将显示所有关键部分。 以下是示例:   0:000> !locks CritSec ntdll!FastPebLock+0 at 77FC49E0 Lock

windbg命令(u、dt、ln、x)-编程思维

目录: (1) u命令(反汇编) (2) dt命令(查看数据结构) (3) ln命令(查找就近的符号) (4) x命令(显示模块的符号) (5) k命令(显示调用栈) (6) d命令(以数据方式显示) (7) b命令(断点) (8) lm lmvm (显示模块信息) (9) .reload (重加载模块) (10) !process !thread .process .thread (查看进程线

一次对pool的误用导致的.net频繁gc的诊断分析-编程思维

(最近有读者朋友表示,希望能加一些示意图来描述分析过程中用到的原理知识。好的,之后我会注意,谢谢这位读者) 背景 有位朋友找我,希望我能帮看一下他的一个service。从他的描述看,并没有资源方面的泄漏,程序目前也能正常工作。他是在用dotnet-counters moniter时发现gc2、也就是full gc触发的比较频繁,频率超过了他自己的预期,于是他心里不踏实,所以想找我看一下。 能在

一次.net code中的placeholder导致的高cpu诊断-编程思维

背景 最近一位朋友找到我,让我帮看他们的一个aspnet core service无端cpu高的问题。从描述上看,这个service之前没有出现过cpu高的情况,最近也没有改过实际的什么code。很奇怪了,会有什么变化导致cpu上去了呢? 分析 由于比较容易复现 (据说一启动service,cpu就上去了),我便让那位朋友在cpu高的时候直接手动把.net进程dump了一下。于是就开始用wind