利用SOS扩展库进入高阶.NET6程序的调试

有时候我们可能想深入到程序的运行核心,去观察下内存分配情况以及堆栈内保存的东东,那么作为编程新贵的底层框架.NET6,又为我们提供了什么可用的观测工具呢?

1.SOS 扩展是什么?

SOS扩展库是Windows 附带的调试扩展库,它允许开发人员在 WinDbg、CDB 或 NTSD 中调试托管代码,请记住,当您执行托管二进制文件时,运行时会生成特定于平台的本机代码,而SOS 扩展允许您以“托管方式”调试本机代码。

最最主要的是,SOS 调试扩展允许您查看有关在** .NET Core 运行时**运行的代码的信息,包括实时进程和转储文件。

2. SOS支持跨平台吗?

是的,sos已经有mac、liunx和windows上的各个版本,它们支持不同的内核核心,可以用到不同的平台上进行扩展调试。

3.如何开始使用SOS?

sos扩展必须附加到别的调试工具上,因此其并不能独立运行。

为了调试.net 6程序,我们分别在不同的平台使用不同的工具进行演示。

3.1 Linux平台上使用LLDB工具

第一步是安装调试器LLDB。LLDB 与 WinDbg 非常相似,也是 SOS 团队一直在使用的调试器,因此我采用它作为 Linux 的默认调试器。

您可以从以下链接安装 LLDB:

https://lldb.llvm.org/download.html

或者您也可以通过运行以下命令来安装它:

yum install lldb

在 Linux 机器上安装 lldb 后,打开终端 并通过在提示符下键入以下命令来启动调试器:

lldb

如果 lldb 已正确启动,您将获得如下所示的 lldb 提示。

3.2 Linux 平台安装sos

没有sos扩展的加持,你是无法调试.NET程序的,因此还需要安装sos扩展。目前dotnet提供了简易安装方式,我们只需要录入下列命令即可。

dotnet tool install --global dotnet-sos
dotnet-sos install

默认安装的sos是和你cpu架构一致的版本,如果你需要其他版本,可以指定参数进行安装。
参数有下列值可用。

  • Arm

  • Arm64

  • X86

  • X64

例如:

dotnet-sos install --architecture Arm

在Linux系统中安装完sos后,再次启动LLDB,会默认加载sos扩展的。

3.3 利用LLDB调试程序

先启动.net 程序,然后利用ps查找进程号。

ps -ef | grep dotnet

然后启动lldb

lldb

在lldb命令界面内键入附加进程命令:

process attach -p 31339

附加dotnet程序进程到分析空间。

Process 31339 stopped

Executable module set to “/tmp/dotnet/bin/Debug/net5.0/dotnet”.

Architecture set to: x86_64–linux-gnu.

一旦附加到 lldb后,就可以显示线程列表。

您可以运行使用bt命令来检索当前线程的调用堆栈,但是很难调试它,因为您无法以“托管方式”查看堆栈.

为了测试,让我们运行clrstack命令,现在我们可以更好地了解正在发生的事情。

d34ba574cf33d99fc110fcda81d3b90a.png

我们还可以运行其他 SOS 命令(如clrThreads) 来找出所有管理线程,为此我们输入:

sos clrThreads

e6ed2cea50789857151a9153b8eb4092.png

如果您想自己尝试其他 SOS 命令,它们会列在 . NET 框架文档

希望这对你有用!

3.4 Windows上调试的支持

还可以通过将 SOS 调试扩展加载到 WinDbg/dbg 调试程序中并在 Windows 调试程序中执行命令来使用此扩展。可对实时进程或转储使用 SOS 命令。

欢迎尝试Windbg 预览版【微软商店】,千年不变的界面终于焕然一新。

df654bea5a7e1c96da707ab8a32d664c.png
安装sos依然是这些命令:

dotnet tool install --global dotnet-sos 
dotnet-sos install

安装后,可以在windbg内加载它

. Load %userprofile%\.Dotnet\SOS\sos.dll

然后在任务管理器中找到这个进程,保存dump文件到临时目录,利用windbg打开,并加载sos.dll.

!clrstack -a

5d76fe31c63e48df51f3719e241c3571.png

当然你可以根据需要键入不同的调试命令进行跟踪分析。

!runaway
!threadpool
!continue
!syncblk

4. 小结

高阶调试是不是把你学fei了?恩,学这个跟下篇文章有些瓜葛,因此不得不先介绍下调试器的使用。

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java--用 * 打印出各种图形(新手请进)

------------------------------------ 代码: public class PrintTriangle { public static void main(String[] args) { System.out.println("左边正三角形"); printTopLeft(5); System.out.println("左边倒三角形&quo…

这种动作片还需要汽车特效?

1 奇奇怪怪的扣分点又增加了▼2 就是活好!(素材来源网络,侵删)▼3 不愧是律师!(素材来源网络,侵删)▼4 成都马拉松惊现美食街!(素材来源网络,侵…

Android之支付宝设计与开发

背景 在移动支付领域,支付宝支付占用巨大份额,根据艾瑞咨询公布的报告数据:2014Q3,支付宝斩获了82.6%的市场份额,在移动支付的霸主地位越来越稳固。财付通支付的发力点在微信支付和手Q支付,在移动支付…

秘境探索之一个.NET 对象从内存分配到内存回收

前方高能预警,新手慎入!不听劝阻者,轻则郁闷堆积,重则生死看淡,对编程失去了念想,对生活失去了幻想!好了,心理强大到NB的可以忽略前方若干警示。为了探索.NET对象的内存分配和回收销…

这五部关于宇宙的神级纪录片,带你探索未知的外太空世界

宇宙之大无奇不有,在你的认知里你又知道多少关于宇宙的事情,如果单单用外星人概括你所对宇宙的认知就真的太片面了,小编今天就带来下面这四部关于宇宙的硬核纪录片,带你真正的去了解关于宇宙的知识,让你遨游在宇宙的知…

Exceptionless服务端+kibana部署实时日志纪要

安装软件列表Exceptionless.4.1.2861.zipelasticsearch-5.6.14.zipkibana-5.6.14-windows-x86.zip安装准备1. 在D盘下创建Exceptionless文件夹2. 拷贝需要安装的软件(参照上面安装软件列表)到Exceptionless文件夹下3. 安装JDK 1.8 (C环境中已经有安装, 步骤忽略)4. …

好心帮男朋友洗衣服,他却要分手??

1 每天一个分手小技巧(via.平民窟公主)▼2 导航最近的加油站(素材来源网络,侵删)▼3 单位停电发的蜡烛(via.蜻蜓队长)▼4 我也不知道原来有人这样穿啊!(素材来源网络&…

Android之如何解决右上角不显示3个点的菜单

之前写过小例子,发现菜单栏右上角的那3个点老是显示不出来,今天终于解决了,不废话,先爆照。 我之前的代码menu_main.xml 文件如下 <menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools&quo…

大型网站架构系列:电商网站架构案例

为什么80%的码农都做不了架构师&#xff1f;>>> #0 系列目录# 大型分布式网站架构大型分布式网站架构技术总结大型网站架构系列&#xff1a;电商网站架构案例#1 电商案例原因# 分布式大型网站&#xff0c;目前看主要有几类1.大型门户&#xff0c;比如网易&#xff…

八、结构模式之组合(Composite)模式

组合模式属于对象的结构模式&#xff0c;有时又叫做部分-整体模式&#xff0c;组合模式将对象组织到树结构中&#xff0c;可以用来描述整体与部分的联系。其可以使客户端将单纯元素和组合元素同等对待。 当需求中是体现部分与整体层次的结构时&#xff0c;以及你希望用户可以忽…

代言男科、站台微商、变身神棍....这些科学家被捧了几十年,黑历史曝光后,让人三观尽毁......

全世界只有3.14 % 的人关注了爆炸吧知识说到诺贝尔奖得主&#xff0c;尤其科学类奖项&#xff0c;吃瓜群众的感受常常是:不明觉厉。关于他们有多牛x的故事&#xff0c;你肯定听了不少。但你一定很少听过&#xff0c;诺奖得主转而研究伪科学&#xff0c;或者为了恰饭疯狂掉节操的…

拉屎能赚钱?在马桶上月入过万?原来卫生间里还有这么多隐藏福利,超模君都惊了……

全世界只有3.14 % 的人关注了爆炸吧知识模友们&#xff0c;你们有过“带薪拉屎”的经历吗&#xff1f;没错&#xff0c;假如我们每天花10分钟“带薪拉屎”&#xff0c;那一年大概能积攒下来40小时&#xff0c;假如我们每天工作8小时&#xff0c;等于多了5天年假&#xff0c;白嫖…

Android之让图片匀速旋转效果

图片匀速旋转 当我们更新的时候,需要把更新小图标旋转起来,不废话,先爆照 介绍动画: Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果;第二类是 Frame 动画,即顺序播放事先…

dotnet 使用 Infer# 自动分析代码缺陷

本文告诉大家如何使用 Infer# 开源库配合 GitHub 的 Action 实现自动分析代码缺陷&#xff0c;如找到可空引用或线程安全等问题这是一个在 GitHub 上完全开源的仓库&#xff0c;请看 https://github.com/microsoft/infersharp刚好今天收到了 Infer# 发布 1.2 版本博客&#xff…

发了篇paper,双非二本的她直博浙大

全世界只有3.14 % 的人关注了爆炸吧知识大家好&#xff0c;我是小南&#xff0c;本科就读于国内某双非二本院校&#xff0c;于2019年拿到了浙江大学的直博录取函。很多人问我从二本院校成功跨越到国内知名高校的秘诀是什么&#xff0c;我个人觉得&#xff0c;除开运气&#xff…

PS网页设计教程XVI——在PS中创建一个摩登实验室风格的网页设计

作为编码者&#xff0c;美工基础是偏弱的。我们可以参考一些成熟的网页PS教程&#xff0c;提高自身的设计能力。套用一句话&#xff0c;“熟读唐诗三百首&#xff0c;不会作诗也会吟”。 本系列的教程来源于网上的PS教程&#xff0c;都是国外的&#xff0c;全英文的。本人尝试翻…

好评率超高的9个公众号,值得收藏

不管世界变化多快&#xff0c;阅读仍是个不过时的动作。今天就为大家推荐几个优质公众号&#xff0c;从社会热点、读书成长、生活新知&#xff0c;你的碎片化时间&#xff0c;我们包了&#xff01;一起来看看呀~长按二维码&#xff0c;“识别图中二维码”即可订阅————电商头…

.NET 6新特性试用 | 文件范围的命名空间

前言在前面的《隐式using指令》文章中&#xff0c;我们介绍了global using&#xff0c;可以减少我们代码文件中的“噪音”&#xff0c;使代码更简洁。今天&#xff0c;我们介绍.NET 6中另一个简化代码的方式——文件范围的命名空间。Demo当我们向项目中添加一个类文件时&#x…

Android之三大图片缓存原理、特性对比

一. 四大图片缓存基本信息 Universal ImageLoader 是很早开源的图片缓存&#xff0c;在早期被很多应用使用。Picasso 是 Square 开源的项目&#xff0c;且他的主导者是 JakeWharton&#xff0c;所以广为人知。Glide 是 Google 员工的开源项目&#xff0c;被一些 Google App 使用…