如何分析 StackOverflow 异常 ?

一般来说,当你的方法递归调用次数太多大于线程栈的默认1M内存时将会抛出 StackOverflowException 异常。

举个例子,假设你有下面这段代码:

using System;namespace temp
{class Program{static void Main(string[] args){Main(args); // Oops, this recursion won't stop.}}
}

这个 Main 方法会持续的调用自己直到超出默认的栈空间,因为没有栈空间了,所有 CLR 执行引擎 就会抛出 StackOverflowException 异常。

> dotnet run
Stack overflow.

接下来我们看看如何在 .netcore 中生成这种 crash dump。

netcore 生成 dump

  1. 设置环境变量,配置crash时自动生成dump

> export DOTNET_DbgEnableMiniDump=1
> dotnet run
Stack overflow.
Writing minidump with heap to file /tmp/coredump.6412
Written 58191872 bytes (14207 pages) to core file
  1. 安装  dotnet-sos 工具

dotnet-sos installc
  1. 通过 lldb 调试 dump

lldb --core /temp/coredump.6412
(lldb) bt
...frame #261930: 0x00007f59b40900ccframe #261931: 0x00007f59b40900ccframe #261932: 0x00007f59b40900ccframe #261933: 0x00007f59b40900ccframe #261934: 0x00007f59b40900ccframe #261935: 0x00007f5a2d4a080f libcoreclr.so`CallDescrWorkerInternal at unixasmmacrosamd64.inc:867frame #261936: 0x00007f5a2d3cc4c3 libcoreclr.so`MethodDescCallSite::CallTargetWorker(unsigned long const*, unsigned long*, int) at callhelpers.cpp:70frame #261937: 0x00007f5a2d3cc468 libcoreclr.so`MethodDescCallSite::CallTargetWorker(this=<unavailable>, pArguments=0x00007ffe8222e7b0, pReturnValue=0x0000000000000000, cbReturnValue=0) at callhelpers.cpp:604frame #261938: 0x00007f5a2d4b6182 libcoreclr.so`RunMain(MethodDesc*, short, int*, PtrArray**) [inlined] MethodDescCallSite::Call(this=<unavailable>, pArguments=<unavailable>) at callhelpers.h:468
...
  1. 可以看到栈顶的 0x00007f59b40900cc 出现了多次重复,然后使用 SOS 的 ip2md 命令通过 address 找到对应的方法。

(lldb) ip2md 0x00007f59b40900cc
MethodDesc:   00007f59b413ffa8
Method Name:          temp.Program.Main(System.String[])
Class:                00007f59b4181d40
MethodTable:          00007f59b4190020
mdToken:              0000000006000001
Module:               00007f59b413dbf8
IsJitted:             yes
Current CodeAddr:     00007f59b40900a0
Version History:ILCodeVersion:      0000000000000000ReJIT ID:           0IL Addr:            0000000000000000CodeAddr:           00007f59b40900a0  (MinOptJitted)NativeCodeVersion:  0000000000000000
Source file:  /temp/Program.cs @ 9
  1. 有了方法接下来可以到 /temp/Program.cs @ 9 行中找到问题代码,如果还没有水落石出的话,可以再辅助一些日志。

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

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

相关文章

PHP json_encode() 函数介绍

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。 这个函数的功能是将数值转换成json数据存储格式。 view source print?01<?php 02$arr array03 ( 04 Name>希亚, 05 Age>2…

小波变换原理_小波变换的知识,转载的

一、绘制原理&#xff1a;需要用到的小波工具箱中的三个函数cwt()&#xff0c;centfrq()&#xff0c;scal2frq()。具体参数及用途介绍如下&#xff1a;&#xff08;1&#xff09;COEFS cwt(S,SCALES,wname)该函数实现连续小波变换&#xff0c;其中S为输入信号&#xff0c;SCAL…

c语言逆序数输三个数,C语言求助!一个三位数的逆序数,总是编不对

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include int main(){int n,a,b,c,sum,ge,shi,bai;printf("请输入一个三位整数&#xff1a;\n");scanf("%d",&n);nfabs(n);an/100;b(n-a*100)/10;cn%10;if(a>b&&b>c){gec…

不让伤害再次发生

不让伤害再次发生我是英特尔成都工厂的第二批员工,在上海工厂学习培训之后,于2005 年加入到成都封装测试工厂的启动和生产工作中,到2010 年,我已经在成都工厂工作了五年半。在这五年半时间里,我始终在封装工程部任工程师,负责站点的设备、工艺和质量,确保站点按照相关计划和流程…

撩妹学会这一招,就没有人能拒绝你!

1 为了恋爱学会了 PS&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 二十不惑&#xff0c;手很迷惑▼3 怀疑家里的猫是「人变的」&#xff08;via.七七和铲屎官&#xff09;▼4 云南人有多喜欢吃菌子&#xff08;via.车夫&#xff09;&#xff08;请勿模仿&…

Javascript:阻止浏览器默认右键事件,并显示定制内容

在逛一些知名图片社区的时候&#xff0c;遇到自己心怡的图片&#xff0c;想要右键另存的时候&#xff0c;默认的浏览器菜单不见了&#xff0c;却出现了如&#xff1a;[©kevin版权所有]之类的信息&#xff1b; 今天在看Javascript事件默认行为相关的知识&#xff0c;所以&a…

【慢慢学算法】:查找第k小数

题目描述&#xff1a;查找一个数组的第K小的数&#xff0c;注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。 输入&#xff1a;输入有多组数据。每组输入n&#xff0c;然后输入n个整数(1<n<1000)&#xff0c;再输入k。 输出&#xff1a;输出第k小的整数。 样例输入…

Dapr + .NET 实战(十三)跨语言开发

欢迎大家参加4小时Dapr.NET 5的实战课程课程链接 https://ke.qq.com/course/4000292?tuin1271860f因为基于Dapr的服务架构是不限语言的&#xff0c;我们来看看Dapr的跨语言开发。我们使用golang&#xff0c;python&#xff0c;.NET来实现跨语言的服务调用&#xff0c;拓扑…

linux 压缩成bz2,linux 将文件压缩成bz2格式 命令:bzip2

bzip2命令用于创建和管理(包括解压缩)“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种&#xff0c;以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例供大家查看&#xff0c;相信大家看完后会有很多收获。语法bzip2 (选项 ) (参数)选项-c或——stdout&am…

飞机上的排泄物都去哪里了?直接冲下来?

全世界只有3.14 % 的人关注了爆炸吧知识火车想必大家都知道&#xff0c;上完厕所&#xff0c;来也冲冲&#xff0c;去也冲冲&#xff0c;直接拥抱大地&#xff01;所以进站都会锁厕所门~那么飞机上也是这样吗&#xff1f;飞机上早期的厕所 早期&#xff0c;飞机上的马桶和普通…

Android去掉顶部的阴影

首先定义一个style <style name"Theme.IOSched" parent"android:style/Theme.Light"> <item name"android:windowNoTitle">true</item><item name"android:windowContentOverlay">null</item></sty…

.NET 基金会项目介绍 - ReactiveUI

ReactiveUI 是属于 .Net 基金会的一个项目&#xff0c;本文将简要介绍该项目相关的信息。中文介绍中文介绍内容翻译自英文介绍&#xff0c;主要采用意译、如与原文存在出入&#xff0c;请以原文为准。ReactiveUIReactiveUI 是一个可用于所有 .Net 平台的可组合的 MVVM 框架&…

NPOI 删除指定的行

http://jiajietieren.blog.163.com/blog/static/60186942201261673517542/转载于:https://www.cnblogs.com/ajie1212/archive/2012/07/16/2594125.html

最具体的历史centos下一个 postfix + extmail + dovecot + maildrop 安装注意事项2014更新...

这篇文章原本是2008年发表的&#xff0c;近期几天照此笔记又安装了一遍系统。这里更新一下记录。作者&#xff1a;wangdy本文发表于 http://blog.csdn.net/aryang/article/details/40593283 转载请注明&#xff01;1. 概述 安装环境是CentOS6.5&#xff0c;拿到server的时候仅…

android 只能输入汉字,EditText限制输入的几种方式及只显示中文汉字的做法

前段时间项目中有个需求是要求只能输入汉字&#xff0c;并且不能输入偏旁部首&#xff0c;于是总结了下EditText限制输入的几种方式&#xff0c;但是对于语音输入的还没找到好的解决方案&#xff1a;通过设置EditText的inputType来限制&#xff0c;可以在xml或者java代码中设置…

plsql导出表结构到excel_plsql怎么导出表格!如何用plsql从oracle中导入导出数据

如何将plsql内多个窗口查询结果同时导出到excel内在PL/SQL工具中执行得到的可以导出放在同一个EXCEL的多个Sheet页签的&#xff0c;操骤为&#xff1a;选中其中一个结果集中数据→右键→复制到Excel→作为xls复制所有(or作为xlsx复制所有)→完成。操作截图&#xff1a;Excel展示…

史上最强悍的一张图,没有任何一个中国人能躲得开!

▲ 点击查看几乎每个家庭都会有两张地图&#xff1a;一张世界地图&#xff0c;一张中国地图。薄薄的两张纸&#xff0c;蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长&#xff0c;也是300多年来唯一一位女校长德鲁吉尔平福斯特&#xff08;Drew Gilpin Faust&#x…

解决vista/win7安装windows live messenger 2011找不到wlidcli.dll及错误800488eb .

问题一&#xff1a;找不到文件wlidcli.dll。 这个问题可能是由于修改了默认的Common Files 文件夹所在磁盘造成的。默认的位置是“C:/Program Files (x86)/Common Files/microsoft shared/Windows Live”&#xff0c;比如被改到了“D:/Program Files (x86)/Common Files/micros…

Dapr牵手.NET学习笔记:可观测性-分布式跟踪

分布式跟踪在dapr里是开箱即用的&#xff0c;不需要对应用作任何一丁点的侵入式编程。之前的开发&#xff0c;如果想实现分式跟踪&#xff0c;就得在应用中埋点&#xff0c;这是一个与业务无关系的动作。dpar通过sidecar可以轻松做到这点&#xff0c;从而让程序员更多精力投入到…

mysql cookbook 1

show databases; use [database]; show tabels;GRANT ALL ON database.* TO user localhost IDENTIFIED BY password;>mysql -h localhost -p -u user;转载于:https://www.cnblogs.com/chhyong88/archive/2012/07/22/2603592.html