【问题标题】:Can't get debugging to work: .NET 4.0, Windows 2003 server无法进行调试:.NET 4.0、Windows 2003 服务器
【发布时间】:2010-12-05 19:44:55
【问题描述】:

我有一个在生产服务器上运行的 .NET 4.0 控制台应用程序。该应用程序在 ad-hoc 基础上运行,编译为调试版本,所有调试符号都与 exe 一起发送到服务器。

当应用程序中引发异常时,我希望它会像任何旧的控制台应用程序一样将堆栈打印到控制台。相反,我看到的行为是这样的:

  1. 出现 JIT 调试器窗口,要求进行调试。
  2. 如果我说“是”,它会启动一些极其有限的 VS 2005 版本。我被转储到汇编语言中,看不到源代码或文件名。堆栈跟踪的所有级别都是这种情况。
  3. 如果我说“不”,则根本不会向控制台写入任何信息。

我已经尝试在 powershell shell 和传统的 cmd 控制台中运行它,效果相同。

服务器运行 ASP.NET 4.0,并且可以轻松地将这些错误返回给浏览器。

我想要的是简单地查看真正的错误并将堆栈打印到控制台,而不会弹出 JIT。除了全局捕获和写入之外,我还有哪些选择?

【问题讨论】:

  • 您是否在具有管理员权限的帐户下运行?
  • 请参阅我对stackoverflow.com/questions/4346970/… 的回答,了解如何生成故障转储,可以在调试器中检查。
  • 是的,帐户是管理员。

标签: .net debugging console


【解决方案1】:
using System;

class Program {
    static void Main(string[] args) {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        throw new Exception("test");
    }

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
        Console.WriteLine(e.ExceptionObject.ToString());
        Console.ReadLine();
        Environment.Exit(1);
    }
}

【讨论】:

  • 好吧,我知道我能做到。我更感兴趣的是为什么我不能像在大多数其他环境中那样简单地看到失败。
  • 未处理的异常处理在 .NET 4.0 中发生了变化。目标 3.5 看看差异。
  • 不能再花时间在这上面了,这很容易。谢谢。
【解决方案2】:

您最好的选择是使用 Windbg 来调试和分析应用程序: http://www.microsoft.com/whdc/devtools/debugging/default.mspx

您可以在 Windbg 中使用 SOSEX 扩展进行托管调试: http://www.stevestechspot.com/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多