Windbg .net内存调试有用的命令(笔记 )

和.net内存调试相关的Windbg命令

首先.load sosex.dll加载ex调试扩展dll

1、!gcgen [obj地址]

显示对象属于gc代数

2、!dumpgen [0/1/2]

dump出0/1/2代所用对象

3、strings

在托管堆搜索字符串,可指定匹配字符串如:!strings -m:Debug

-g:指定代数,-n:最小大小,-x:最大大小

4、!dumpheap

分析托管堆对象分配汇总信息

5、!eeheap -gc/-loader

查看gc堆/loader堆信息

6、!dumpobj/!dumpvc

查看对象/值类型

7、!fq

查看终结队列

FinalizeQueue:实现Dispose且有Root

F-ReachableQueue:实现Dispose没有根会被移到这里,终结线程对其执行Dispose操作,最后移除,在下一次GC之后被释放。

8、!objsize

输出所有对象大小

9、!VerifyHeap

校验堆破坏情况

时间: 2024-10-27 05:41:06

Windbg .net内存调试有用的命令(笔记 )的相关文章

windbg 调试命令笔记1

一.windbg 常用知识: 1. Windbg中的调试命令,分为三种:基本命令,元命令和扩展命令.基本命令和元命令是调试器自带的,元命令总是以“.”开头,而扩展命令是外部加入的,总是以感叹号“!”开头 基本命令最少了,大概40个左右.列举所有的基本命令,使用如下命令: ? 元命令有一百多个,使用下面命令列举所有元命令: .help  [/D] 2. 基本信息 version    显示操作系统的版本信息以及Windbg本身的版本信息,Windbg的配置和操作系统密切相关,所以将操作系统的版本信

《软件调试的艺术》笔记--预备知识

1.gcc的-g选项 如果要使用gdb进行调试,必须在编译时在gcc中加入-g选项,使用参数 -g 表示将源代码信息编译到可执行文件中. 如果不使用-g选项: #include <stdio.h> int main(void) { int i = 1; i = i + 1; printf("i = %d\n",i); return 0; } gcc main.c gdb a.out (gdb) b main Breakpoint 1 at 0x4004f8 (gdb) r

Windbg非侵入性调试(用户模式)

如果用户模式应用程序已经在运行,调试器可以非侵入性地对其进行调试.对于非侵入性调试,您没有那么多的调试操作.但是,您可以最小化调试器对目标应用程序的干扰.如果目标应用程序已停止响应,则非侵入性调试非常有用.在非侵入性调试中,调试器实际上并不附加到目标应用程序.调试器挂起目标的所有线程,并可以访问目标的内存.寄存器和其他此类信息.但是,调试器无法控制目标,因此g(Go)等命令不起作用.如果尝试执行非侵入性调试期间不允许的命令,则会收到一条错误消息,指出“The debugger is not at

基于WinDbg的内存泄漏分析

在前面C++中基于Crt的内存泄漏检测一 文中提到的方法已经可以解决我们的大部分内存泄露问题了,但是该方法是有前提的,那就是一定要有源代码,而且还只能是Debug版本调试模式下.实际上很 多时候我们的程序会用到第三方没有源代码的模块,有些情况下我们甚至怀疑系统模块有内存泄露,但是有没有证据,我们该怎么办? 这时我们就要依靠无所不能的WinDbg了. WinDbg的!heap命令非常强大,结合AppVerifier可以对堆(heap)内存进行详细的跟踪和分析, 我们接下来对下面的代码进行内存泄漏的

《软件调试的艺术》笔记--停下来环顾程序

1.断点列表 创建的每个断点(包括断电.监视点和捕获点)都标识为从1开始的唯一整数标识符.这个标识符用来执行该断点上的各种 操作.调试器还包含一种列出所有断点及其属性的方法. 调试下面的代码:(代码1) #include <stdio.h> void display(int i) { i = i + 1; printf("i = %d\n",i); } int main(void) { int i = 1; display(i); return 0; } 设置断点--显示断

Linux 新手非常有用的命令

http://www.cnblogs.com/felix-/p/4341773.html Linux 新手非常有用的命令 你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现我的世界里了. 从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳.我担心该记住多少命令,来帮助我完成所有任务. 毫无疑问,在线文档,书籍,man pages以及社区帮了我一个大忙,但是我还是坚信有那么一篇文章记录了如何简单学习和理解命令的秘籍

Windbg Memory(内存)窗口的使用

在 WinDbg 中,可以查看和编辑内存,通过输入命令或通过使用内存窗口. 内存窗口的打开 通过菜单View-->Memory 通过快捷键Alt+5 通过工具栏 使用内存窗口 通过上面方式打开的窗口如下: 内存窗口显示多个列中的数据. 在窗口的左侧列显示每个行的开始地址. 其余列显示所需的信息,从左到右. 如果选择字节中显示格式菜单中,对应于这两个字节的 ASCII 字符将显示在窗口的右侧. 请注意  默认情况下,内存窗口显示虚拟内存. 这种类型是内存的内存的在用户模式下可用的唯一类型. 在内核

Windbg+VirtualBox双机调试环境配置(XP/Win7/Win10)

一.下载WDK10 https://developer.microsoft.com/zh-cn/windows/hardware/windows-driver-kit 安装Windows驱动程序工具包(WDK) 10 这里可以直接安装,也可以下载安装包,我选择下载,选择路径,下一步. 下载好之后我们安装WDK 安装好了之后,Windbg就在C:\Program Files (x86)\Windows Kits\10\Debuggers\x64目录下 二.配置Win10虚拟机调试 1.关闭防火墙"

《软件调试的艺术》笔记--调试多线程程序

下面是于线程相关的GDB命令用法汇总: info threads:给出关于当前所有线程的信息. thread 3:改成线程3. break 88 thread 3 :当线程到达源代码88时停止执行. break 88 thread 3 if i == 2 当线程3到达源代码行88行,并且变量i的值为2时停止执行. 对下面的多线程进行调试: #include <stdio.h> #include <pthread.h> #include <string.h> #inclu