详细信息如下:https://github.com/dotnet/coreclr/blob/master/Documentation/botr/xplat-minidump-generation.md#configurationpolicy
进行开启:
文章插图
然后重启,再来点击clash3进行崩溃一下 。
文章插图
可以看到这里就有了 。
这里我们先转储文件符号一下:
dotnet-symbol /tmp/coredump.9784-o /dumps/symbols/ --host-only
然后进去一下:lldb --core /tmp/coredump.9784
这个时候要加载一下dotnet 符号 。setsymbolserver -directory /dumps/symbols/
然后加载转储文件符号:loadsymbols
这样就搞定了 。clrsthread 查看一下线程的情况:
文章插图
这里可以看到里面有个异常是15号线程 。
切到15号线程:
setthread 15:
文章插图
然后查看一下clrstack(调用栈信息):
文章插图
这个似乎没有告诉我们很多很有用的信息 , 只能告诉我们线程异常了,当然也告诉我们具体的行,可以去看下去源代码看下什么类型异常,但是有跟好用的pe 。
用pe查看下:
pe-- Displays and formats fields of any object derived from the Exception class at the specified address.
文章插图
【重新整理 .net core 实践篇 ———— linux上排查问题实用工具 [外篇]】这样就定位到具体的崩溃文件了 。
知道了崩溃是因为HttpWebRequest,希望的是能查到到底是哪个访问url造成了崩溃 。
下面这个图 , 证明可调用了HttpWebRequest引发的:
文章插图
使用dumpheap:dumpheap -stat -type System.Net.HttpWebRequest 查看httpwebrequest 调用栈:
文章插图
查看栈地址:
文章插图
然后是根据地址查看对象:dumpobj 00007fe0c4442f28
文章插图
这个webrequest 里面有一个是system.url 我们写程序的知道这是访问地址 。
然后继续查这个对象 , 上面那个value 就是地址哈 。
00007fe0c4437cf8
然后可以看到url 地址:文章插图
第一个就是了,为什么确认第一个就是,看名字 。
文章插图
这样就查到了 。
先到这里吧,介绍这个lldb 是为了查看非托管栈的,如果查看托管的一般使用dotnet-dump 就好了 。
而且一般是用来分析cpu 和 内存高的地方,一般服务端错误会有日志的 。
结继续后面演示cpu 和 内存高的例子,这个对服务端更有实用性 。
推荐阅读
- .NET 7 中 LINQ 的疯狂性能提升
- 两种 .Net Core 3.0 对 MongoDB 的多条件查询操作
- 螃蟹断掉的腿,还能重新长出来吗?
- .NET性能优化-复用StringBuilder
- .net 温故知新:【8】.NET 中的配置从xml转向json
- 来啦来啦|开源 * 安全 * 赋能 - .NET Conf China
- 如何在.NET程序崩溃时自动创建Dump?
- .NET Conf 2022 – 11 月 8 日至 10 日
- .NET 零开销抽象指南
- 二、.Net Core搭建Ocelot