【问题标题】:How to debug exceptions如何调试异常
【发布时间】:2014-02-16 01:08:53
【问题描述】:

虽然将异常记录到数据库或评估事件查看器非常有用。很多时候,我们常常想知道如何重现错误以便我们可以调试它。您可以应用一些好的做法来序列化调用,然后通过一些工作重现错误并最终调试和修复。我想知道有哪些工具和/或最佳实践可以有效地调试错误以快速修复基于收集的异常信息。换句话说,收集有关任何给定异常的信息,并快速加载到调试会话中\单步执行代码并更有效地解决错误。

我认为这是一个梦想,但如果它存在的话会非常有帮助。

try
{
    //Do something that breaks
}
catch (Exception Ex)
{
    LogExceptionExecution();
}

序列化从LogExceptionExecution()收集的信息; 现在对信息进行序列化,将信息完全获取并直接加载到 Visual Studio 中。然后,Visual Studio 将在方法开始处创建断点并开始调试会话。调试会话将加载所有内容以重新创建首先导致异常的原因。这将允许您调试和修复错误,而无需花费宝贵的时间来重新创建环境并加载错误期间使用的代码以调试和修复代码。

【问题讨论】:

  • 你的问题是什么?
  • 他们说 - I am wondering what tools and or best practices are out there to efficiently debug errors to fix quickly
  • 你可以只创建一个小型转储。
  • 异常已经有堆栈跟踪 - 这是你想要的吗?
  • 是的,它确实有很好的信息,但为了调试它,您仍然需要在调试会话中重新创建异常,以便重现、调试和快速修复。我基本上是想加载异常并调试并快速修复。

标签: c# debugging exception visual-studio-debugging


【解决方案1】:

对于您的情况,您应该在发生异常时编写一个 Minidump 文件。 Minidumps 是一种用于“事后调试”的机制——在应用程序“死”之后对其进行调试。 minidump 是应用程序内存的快照,通常在遇到致命错误时拍摄。

关于如何在 .NET 中创建 minidump,请阅读this

【讨论】:

  • 感谢您的信息!它非常接近,甚至可能正是我想要的。
  • 这个答案肯定需要一些平衡,小型转储有相当严重的问题。除了必须学习 SOS 的奥秘。一个大问题是你实际上不能创建一个小型转储,你必须创建一个包含 GC 堆的巨型转储。这很容易让你退后几场演出。最严重且无法解决的问题是,您必须与客户端使用的 CLR 修订版进行完全匹配。最近的安全更新频率很难达到。
  • @HansPassant,是的,匹配客户端使用的CLR修订版很痛苦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-19
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 2012-03-23
相关资源
最近更新 更多