.NET高级调试 - 3.12 sosex实用的几个命令介绍
简介
sosex是sos的一个拓展,主要目的是将一些繁琐的排查过程脚本化,比如探测死锁,设置断点等。更加方便快捷协助我们排查问题.
比较可惜的是,在.net core中不可用,作者已经不更新了。
更多的命令可以使用!sosex.help 查看帮助

断点加强
原来的bp命令操作起来优点麻烦,还有区分jit有没有编译等因素。而sosex可以管理断点列表,并且可以在任一行上设置断点
!mbl 列出所有断点
sosex维持了一张断点列表,如果断点是通过sosex来设置的,那么它将会被记录在案

- !mbc清除指定断点或者所有断点
- !mbd禁用指定断点或者所有断点
- !mbe启用指定断点或者所有断点
!mbl 设置断点

!mbm 无源码设置断点
如果是动态生成的代码,无法确切知道代码地址。那么该命令可以在特定类型指定IL便宜处设置一个断点。
观察对象布局
一般用!do(DumpObj)命令观察一个对象的时候,只能看到一层。如果你的对象是嵌套了好几层。那就一层一层的敲命令。很不方便


!mdt

相对于使用do,嵌套越深,就越方便
使用!sosex.help mdt 来查看更多用法
搜索托管堆中的字符串
!strings /m:xxxxxx

搜索元数据
使用name2ee 搜索比较麻烦 ,需要模块名+方法名。 我们需要准确的信息。如果我们想模糊搜索呢?
!mx

两者孰优孰劣,一目了然

并且数据也比较全,避免自己敲太多命令
!mln
调用栈加强
!mk
k命令显示非托管代码调用栈,clrstack显示托管代码调用栈。dumpstack同时显示托管与非托管。sos的mk命令是对k命令的加强。
除了会显示托管代码调用栈外,还会显示栈帧的编号

观察Free块
!mfrag
主要用于分析内存碎片化

死锁检测
!dlk
一键检测死锁,方便快捷

否则要先用!syncblk查看同步块,然后再看!clrstack 查看调用堆栈。再判断是否形成死锁。这中间需要自己换算,比较麻烦

总结
sosex是对sos的加强,由于.net core中无法使用。所以主要还是熟练掌握sos命令为主。
.NET高级调试 - 3.12 sosex实用的几个命令介绍的更多相关文章
- [Android Studio 权威教程]断点调试和高级调试
好了开始写一个简单的调试程序,我们先来一个for循环 ? 1 2 3 4 5 6 7 8 <code class="language-java hljs ">for ( ...
- ###Android 断点调试和高级调试###
转自:http://www.2cto.com/kf/201506/408358.html 有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说Android Studio的调试是我 ...
- Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序
系列目录 [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...
- 12个实用的 Javascript 奇淫技巧
这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...
- 12 条实用的 zypper 命令范例 (转载)
12 条实用的 zypper 命令范例 作者: Kerneltalks 译者: LCTT cycoe | 2018-12-12 13:29 zypper 是 Suse Linux 系统的包和补丁管理器 ...
- Android Stuido中断点调试和高级调试
写一个简单的调试程序 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class M ...
- Linux高级调试与优化——gdb调试命令
番外 2019年7月26日至27日,公司邀请<软件调试>和<格蠹汇编——软件调试案例集锦>两本书的作者张银奎老师进行<Linux高级调试与优化>培训,有幸聆听张老师 ...
- .NET高级调试系列-Windbg调试入门篇
Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备.准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试. 今天我们来一篇入门的 ...
- 玩好.NET高级调试,你也要会写点汇编
一:背景 1. 简介 .NET 高级调试要想玩的好,看懂汇编是基本功,但看懂汇编和能写点汇编又完全是两回事,所以有时候看的多,总手痒痒想写一点,在 Windows 平台上搭建汇编环境不是那么容易,大多 ...
- 妈咪,我找到了! -- 15个实用的Linux find命令示例
妈咪,我找到了! -- 15个实用的Linux find命令示例 英文原文:Mommy, I found it! — 15 Practical Linux Find Command Examples ...
随机推荐
- 【Java】Input,Output,Stream I/O流 01 概述 & 4个基础流
Input,Output,Stream IO流 I/O Input/Output缩写.I/O技术用于处理设备之间的数据传输,读写文件,网络通讯 Java程序对于数据的操作以Stream流的形式进行 i ...
- 【Redis】03 Redis 数据类型、相关补充、常用命令
redis的数据类型 1,概述 使用Redis进行应用设计和开发的一个核心概念是数据类型. 与关系数据库不同,在Redis中不存在需要我们担心的表, 在使用Redis进行应用设计和开发时,我们首先应该 ...
- 遗传算法和神经网络融合算法:GA-BP算法流程图
相关: https://d.wanfangdata.com.cn/periodical/sxgcxb202109004
- MAML —— Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
论文地址: https://arxiv.org/abs/1703.03400 官方代码: 有监督学习: https://github.com/cbfinn/maml 强化学习: https://git ...
- 9组-Beta冲刺-5/5
一.基本情况(15分) 队名:不行就摆了吧 组长博客:9组-Beta冲刺-5/5 GitHub链接:https://github.com/miaohengming/studynote/tree/mai ...
- 【CDQ分治】[P5094 [USACO04OPEN] MooFest G 加强版
P5094 [USACO04OPEN] MooFest G 加强版 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <bits/stdc++.h> us ...
- SMU Spring 2023 Contest Round 7
A. Programming Contest 签到题. 输入输出读完应该就懂了: 从y1枚举到y2,若枚举的年份不在停办年份里则答案加一 void solve() { int n,m; cin > ...
- Linux内核 自旋锁spin lock,教你如何用自旋锁让ubuntu死锁
背景 由于在多处理器环境中某些资源的有限性,有时需要互斥访问(mutual exclusion),这时候就需要引入锁的概念,只有获取了锁的任务才能够对资源进行访问,由于多线程的核心是CPU的时间分片, ...
- 使用sl+tmux哇娃
0x01 背景 2岁多的小娃不肯刷牙,有时看故事书时会配合刷一会儿,但偶尔也不好使.突然想到TA,之前在电脑桌旁边捣乱时,给ta看过console中的小火车,ubuntu中安装sl命令后就可以看到,用 ...
- macOS 磁盘设备文件命名规则
macOS 系统使用不同于 Linux 的磁盘设备命名规则.在 macOS 中,磁盘设备和分区被命名并通过 /dev 目录访问,类似于 Linux 和 UNIX 系统.但是,macOS的命名规则遵循特 ...