如何在不链接源代码的情况下调试 System.StackOverflowException?

2023-11-26

最近,我经常遇到以下类型的错误

“‘System.StackOverflowException’类型的未处理异常 发生在未知模块中。”。

这种情况发生在一个具有相当大的代码库(C# / XNA)的游戏(我开发的)中。但通常该错误仅在游戏进行几分钟后才会发生(而不是每次运行时)。

问题在于,不幸的是,Visual Studio 调试器似乎无法进一步定位问题,而只是让我检查汇编代码而不参考源代码行。如何调试这样的错误?我猜像 Valgrind 这样的工具在 C# 中不可用。是否有更好的调试器可以显示问题在源代码中的定位位置?

应用下面建议答案中的步骤时可用的调用堆栈。这是:

ntdll.dll!_NtWaitForSingleObject@12()  + 0x15 bytes 
ntdll.dll!_NtWaitForSingleObject@12()  + 0x15 bytes 
KernelBase.dll!_WaitForSingleObjectEx@12()  + 0xcb bytes    
kernel32.dll!_WaitForSingleObjectExImplementation@12()  + 0x43 bytes    
clr.dll!CLREvent::CreateManualEvent()  - 0x15f3bb bytes 
clr.dll!CLREvent::CreateManualEvent()  - 0x15f37a bytes 
clr.dll!CLREvent::WaitEx()  + 0x47 bytes    
clr.dll!CLREvent::Wait()  + 0x19 bytes  
clr.dll!Thread::WaitSuspendEventsHelper()  + 0xa8 bytes 
clr.dll!Thread::WaitSuspendEvents()  + 0x17 bytes   
clr.dll!Thread::RareEnablePreemptiveGC()  + 0x181977 bytes  
clr.dll!Thread::RareDisablePreemptiveGC()  + 0x38e3 bytes   
clr.dll!Debugger::SendException()  + 0x12b bytes    
clr.dll!Debugger::LastChanceManagedException()  + 0x19f bytes   
clr.dll!NotifyDebuggerLastChance()  + 0x79 bytes    
clr.dll!WatsonLastChance()  + 0x166 bytes   
clr.dll!EEPolicy::HandleFatalStackOverflow()  + 0x189 bytes 
clr.dll!EEPolicy::HandleStackOverflow()  + 0xd8 bytes   
clr.dll!_COMPlusFrameHandler()  + 0xff302 bytes 
ntdll.dll!ExecuteHandler2@20()  + 0x26 bytes    
ntdll.dll!ExecuteHandler@20()  + 0x24 bytes 
ntdll.dll!_RtlDispatchException@8()  + 0xd3 bytes   
ntdll.dll!_KiUserExceptionDispatcher@8()  + 0xf bytes   
clr.dll!SystemNative::ArrayCopy()  + 0x19 bytes 
mscorlib.ni.dll!6ed326a2()  
Frames below may be incorrect and/or missing, no symbols loaded for mscorlib.ni.dll 

如果崩溃发生在 ntdll.dll 上,您需要它的符号,但我认为更可能的是您传递了一些奇怪的垃圾,导致它崩溃。您是否进行了可能会导致崩溃的 Windows API 调用?

另一位用户在这里提到的另一种可能性是,您可能在耗尽堆栈的某个地方进行递归调用。如果调用非托管代码片段,这将尤其成问题:

  • 是否存在可能导致无限循环的逻辑条件?
  • 是否有任何构造函数会无意中进行递归调用?
  • 您的代码中是否有任何可能被卡住的递归方法?

另外,在寻找替代调试方法之前,您可能需要尝试以下几件事:

  1. 确保项目是在 debug 中构建的
  2. 检查 Visual Studio 设置以确保它在出现所有异常时停止
  3. 如果项目设置中可用,请关闭“仅我的代码”设置(这是否会出现在 C# 项目中?)
  4. 打开混合模式调试/非托管调试
  5. 确保符号正在生成并存储在正确的位置 (*.pdb)
  6. 如果所有这些都失败,您可以在系统事件查看器中浏览并查找任何奇怪的错误
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不链接源代码的情况下调试 System.StackOverflowException? 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 如何将字母数字电话号码转换为数字

    UPDATE 我的实用程序的最终版本如下所示 StringBuilder b new StringBuilder for char c inLetters toLowerCase toCharArray switch c case 0 b
  • Simple_form 错误 - ActiveRecord::Relation:Class 的未定义方法“model_name”

    我试图通过将参数传递到 where 来向我的编辑操作添加更多条件逻辑 每当我使用 find params id 以外的任何内容时 都会出现错误 undefined method model name for ActiveRecord Rel
  • python中的求和矩阵列

    我可以对零列中的项目进行求和 但是我应该在哪里更改代码以对矩阵中的第 2 列 第 3 列或第 4 列求和呢 我很容易被难住 def main matrix for i in range 2 s input Enter a 4 by 4 ma
  • 编写 JSON 模式来检测具有重复名称的对象

    根据以下帖子 JSON 语法是否允许对象中有重复的键 JSON 中具有相同名称的键是有效的 但大多数解析器会用它找到的最后一个值覆盖该值 无论如何 json 模式中是否有检测重复名称并引发错误的方法 我希望所有 json 键在对象中都具有唯
  • 在 JavaScript 中压缩开关盒

    我创建了一个棋盘 但我不喜欢 switch case 语句的外观 我认为一定有一种方法可以压缩它 但我找不到 也许你们中的一些人可以帮助我 额外说明一下 棋子是在一个二维数组中 arr2 R N B Q K B N R P P P P P
  • __RTC_CheckEsp是如何实现的?

    RTC CheckEsp是一个验证正确性的调用esp 堆栈 寄存器 调用它是为了确保esp通过函数调用保存 有人知道它是如何实施的吗 对汇编程序进行一点检查就可以发现这一点 0044EE35 mov esi esp 0044EE37 pus
  • 在另一个框架中单击按钮时更新框架上的 JPanel 内容

    我创建了一个框架 x1 其中有一个面板 p1 加载 x1 时 复选框会动态添加到 p1 添加到 p1 的复选框数量取决于数据库表 t1 中满足特定条件的数据值的数量 框架 x1 上有一个按钮 b1 当点击b1时 会显示另一个框x2 在框x2
  • Python:select() 不会发出来自管道的所有输入信号

    我正在尝试使用 Python 加载外部命令行程序并通过管道与其进行通信 该程序通过标准输入获取文本输入 并按行生成文本输出到标准输出 通信应该使用 select 进行异步 问题是 并非程序的所有输出都在 select 中发出信号 通常最后一
  • 在 PHP 中获取两个日期时间之间的间隔秒数?

    2009 10 05 18 11 08 2009 10 05 18 07 13 这应该生成235 怎么做呢 对于 DateTime 对象 您可以这样做 date new DateTime 2009 10 05 18 07 13 date2
  • 更新 dll 而不停止服务

    我想在不停止服务的情况下更新服务器进程的 dll 我怎么做 有点像asp net如何自动拾取放置在bin文件夹中的新dll Asp Net 使用一种称为卷影副本 如果将更新的 dll 复制到应用程序的 bin 子目录中 ASP NET 运行
  • Spring 反应式 WebClient GET json 响应,内容类型为“text/plain;charset=UTF-8”

    当我请求一个端点返回内容类型为 text plain charset UTF 8 且格式正确的 json 响应时 我遇到了 Spring 5 反应式 WebClient 的问题 例外的是 org springframework web re
  • UIImage 动画图像色调颜色?

    有没有办法给动画中的图像着色 我知道我可以像这样对单个图像进行着色 var imageOne UIImage UIImage named pullto 1 png imageOne imageOne imageWithRenderingMo
  • Xcode 6.3 与 Swift 1.0 可能吗?

    是否可以使用 Xcode 6 3 但保留 Swift 1 0 使用 iOS 8 2 SDK 没有帮助 我找不到 Swift 版本的任何开关 编辑 我在 Swift 1 0 中有一个扩展构建 我不想碰它 但更新我的主项目 如果您遇到语法问题
  • Image.fromarray 只产生黑色图像

    我正在尝试使用将 numpy 矩阵保存为灰度图像Image fromarray 它似乎适用于随机矩阵 但不适用于特定矩阵 应该出现一个圆圈 谁能解释我做错了什么 from PIL import Image import numpy as n
  • C 中 long double 的转换说明符

    The 长双数据类型在 C 中可以有这些转换说明符 Le LE Lf Lg LG 参考 我写了一个小程序来测试 include
  • MongoDB - 子级和父级结构

    最近刚刚深入研究了 MongoDB 的 NoSQL 世界 我仍然在努力理解在没有第三次标准化数据然后加入数据的情况下最好的架构方法 目前我正在设计的项目是一个简单的文章集合 类似于维基 一篇文章将有标题和文本 以及 可能 一篇父文章和一篇或
  • Android onCreate 或 onStartCommand 用于启动服务

    通常当我创建 Android 服务时我会实现onCreate方法 但在我的上一个项目中这不起作用 我尝试实施onStartCommand 这似乎有效 问题是 当我必须实现一个服务时需要哪种方法 我必须实施哪些方法 onCreate onSt
  • Apple 开发者帐户团队未出现在 VS Mac 上

    当我在 Visual Studio Mac Community 2017 上登录我的 Apple ID 帐户时 团队没有显示 我必须有付费的苹果开发者帐户才能使用它吗 没有显示任何团队 并且 查看详细信息 按钮没有执行任何操作 另外 帐户左
  • 如何设置 Gtk.ComboBox 的值?

    我能弄清楚的只是与 ComboBox GetEnumerator 或类似的东西有关 我想做这样的事情 System Collections IEnumerator e this task difficulty combobox GetEnu
  • 如何在不链接源代码的情况下调试 System.StackOverflowException?

    最近 我经常遇到以下类型的错误 System StackOverflowException 类型的未处理异常 发生在未知模块中 这种情况发生在一个具有相当大的代码库 C XNA 的游戏 我开发的 中 但通常该错误仅在游戏进行几分钟后才会发生