此文是《.NET内存管理宝典   提高代码质量、性能和可扩展性》(英文名《Pro .NET Memory Management: For Better Code, Performance, and Scalability》)一书的售后服务系列文章之一。

在《.NET内存管理宝典   提高代码质量、性能和可扩展性》一书(目前我还在翻译本书,预计年底出版)的第3章 “内存测量”里的“WinDbg”一节中,有提到:

还有一个有用的工具可以用于WinDbg - 命令树窗口。由于一次又一次地键入所有命令非常麻烦,因此你可以创建一个包含可用命令的结构化列表的文件。然后,通过使用.cmdtree <file>命令,只需单击一下即可创建具有所有这些命令的专用窗口。

这一段超级有用,但是原著讲得十分笼统。因此我打算专门写一篇blog来体现它的威力。然而在写的过程中,发现了如下这篇blog已经写得很好了,我已经没有再重新专门写一篇的必要了,因此我决定就转载这一篇文章:

原文出处:https://www.cnblogs.com/yilang/p/11952873.html 并且我在此对该文作者表示感谢,给与一个大大的赞

WinDbg常用命令系列---.cmdtree

.cmdtree

简介

使用形式

.cmdtree cmdfile

参数

  • cmdfile
    命令文件,包含多个你需要的命令。必须是一个文本档

使用步骤

1、使用命令创建文本文件test.wl,使用以下示例作为模板。您可以按所需方式修改{}之间的节:

windbg ANSI Command Tree 1.0

title {"Common Commands"}

body

{"Common Commands"}

 {"Information"}

  {"Time of dump"} {".time"}

  {"Process being debugged"} {"|"}

  {"Dump Location"} {"||"}

  {"Create server on port 9999"} {".server tcp:port=9999"}

  {"Show remote connections"} {".clients"}

  {"Process Environment Block"} {"!peb"}

 {"Logging"}

  {"Open Log"} {".logopen /t /u /d"}

  {"Close Log"} {".logclose"}

 {"Modules"}

  {"All Modules"} {"lm D sm"}

  {"Loaded Modules"} {"lmo D sm"}

  {"Loaded Modules (verbose)"} {"lmvo D sm"}

  {"Modules w/o symbols"} {"lme D sm"}

 {"Stacks"}

  {"Set frame length to 2000"} {".kframes 2000"}

  {"Dump current stack w/ DML"} {"kpM 1000"}

  {"Dump stacks without private info"} {"knL 1000"}

  {"Dump stacks with all parameters"} {"kPn 1000"}

  {"Dump stacks (distance from last frame)"} {"kf 1000"}

  {"Dump stacks with Frame Pointer Omission"} {"kvn 1000"}

  {"Dump all stack"} {"~*kbn 1000"}

  {"Dump unique stacks"} {"!uniqstack -pn"}

  {"Thread environment block"} {"!teb"}

  {"Move to next frame"} {".f+"}

  {"Move to previous frame"} {".f-"}

 {"Memory"}

  {"Dump heaps"} {"!heap -a"}

 {"Automated Task"}

  {"!analyze"} {"!analyze -v"}

  {"Locks"} {"!ntsdexts.locks"}

  {"CPU time for User and Kernel Mode"} {"!runaway 7"}

 {"Managed"}

  {"Load sos"} {".loadby sos mscorwks"}

  {"clrstack"} {"!clrstack"}

  {"Threads"} {"!threads"}

  {"Stack Objects"} {"!dso"}

  {"Exceptions"} {"!dae"}

2、将文本文件保存在任何目录,建议是安装WinDbg的同一文件夹中。

3、打开转储文件,加载符号,然后使用以下命令:

.cmdtree xxx\test.wl

4、上面的命令将创建一个包含您的命令的新WinDbg窗口。您可以双击树状图窗口中的一个项目来执行该命令。

 

《.NET内存管理宝典》 售后服务系列文(2) - WinDbg命令.cmdtree的更多相关文章

  1. Spark 静态内存管理

    作者编辑:杜晓蝶,王玮,任泽 Spark 静态内存管理详解 一. 内容简介 spark从1.6开始引入了动态内存管理模式,即执行内存和存储内存之间可以互相抢占.spark提供两种内存分配模式,即:静态 ...

  2. java HotSpot 内存管理白皮书

    原文见:http://www.open-open.com/lib/view/open1381034220705.html.查阅资料后,对原文做了补充. 文中关于JVM的介绍基于JDK1.6的Hotsp ...

  3. Intel X86 32位CPU内存管理----《Linux内核源码情景分析》笔记(一)

    Intel X86 32位CPU内存管理 在X86系列中,8086和8088是16为处理器,而从80386开始为32为处理器,80286则是该系列从8088到80386,也就是16位处理器到32位处理 ...

  4. 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制

    今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...

  5. Java内存管理-一文掌握虚拟机创建对象的秘密(九)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! [福利]JVM系列学习资源无套路赠送 回顾一下: 本文是接着上一篇内容:Java内存管 ...

  6. [译]C# 7系列,Part 10: Span<T> and universal memory management Span<T>和统一内存管理

    原文:https://blogs.msdn.microsoft.com/mazhou/2018/03/25/c-7-series-part-10-spant-and-universal-memory- ...

  7. 一文洞悉JVM内存管理机制

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习导图: 一.为什么要学习内存管理? Java与C++之间有一堵由内存动态分配和垃圾回收机制所围成的高墙,墙 ...

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

    一文了解.Net的CLR.GC内存管理 微软官方文档对内存管理和CLR的概述 什么是托管代码? 托管代码就是执行过程交由运行时管理的代码. 在这种情况下,相关的运行时称为公共语言运行时 (CLR),不 ...

  9. Swift中的可选链与内存管理(干货系列)

    干货之前:补充一下可选链(optional chain) class A { var p: B? } class B { var p: C? } class C { func cm() -> S ...

  10. C++ 系列:内存管理

    1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2)在栈上创建. 在执行函 ...

随机推荐

  1. 多线程系列(二) -Thread类使用详解

    一.简介 在之前的文章中,我们简单的介绍了线程诞生的意义和基本概念,采用多线程的编程方式,能充分利用 CPU 资源,显著的提升程序的执行效率. 其中java.lang.Thread是 Java 实现多 ...

  2. openai chatGPT 原理通俗介绍

    引言 近年来,随着深度学习技术的不断发展,自然语言处理(NLP)领域取得了长足的进步.ChatGPT(Generative Pre-trained Transformer)作为一种先进的语言生成模型, ...

  3. Keil MDK STM32系列(十) Ubuntu下的PlatformIO开发环境

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  4. RDM6300 125KHz ID卡读卡器

    RDM6300 RDM6300是一个针对125KHz ID卡的读卡模块, 用于读取EM4100兼容ID卡信息, 由一片C8051F330和一片LM358D双运放组成 注: EM4100, 4200卡是 ...

  5. P4141 消失之物题解(写给每一位与我一样的新手玩家)

    消失之物 传送门: P4141 消失之物 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 暴力稳了 但是 hack tle了 这时候我们要想办法优化 这是一个回退背包问题 首先 ...

  6. windows 上 ffmpeg 库的安装

    真复杂啊 安装 ffmpeg 库有两种途径,一种是自己下载源码再去编译,另一种是使用 vcpkg 自动安装 一般情况下,第二种是最简单方便的,但是如果你需要使用 ffmpeg 的特定历史版本,那就有点 ...

  7. Windows系统下的输入法选择

    总共用过5款输入法:搜狗拼音输入法,QQ拼音输入法,谷歌拼音输入法,手心输入法,小狼毫. 搜狗输入法功能最强大,词库也很全,基本上对于盲打的输入纠错很准确,但是因为后台会启动多个服务,会占很多内存资源 ...

  8. gin中间件&控制器

    中间件 Gin 框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数.这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证.权限校验.数据分页.记录日志.耗时统计等. ...

  9. ABP开发需要用到的命令

    0.命令行在哪里执行? 在Visual Studio的"解决方案资源管理器"的解决方案或者项目上点鼠标右键,选择"在终端中打开". 1.安装abp的命令行 官网 ...

  10. [前端] html和原生js实现鼠标拖动和触摸拖动以及点击后跟随鼠标移动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...