【问题标题】:Generate Core Dump for Mono C# Application为 Mono C# 应用程序生成核心转储
【发布时间】:2012-08-20 21:52:02
【问题描述】:

我目前正在开发一个在单声道下运行的 c# linux 应用程序。虽然,我相信我已经处理了程序中可能引发的任何异常,但是如果我错过了任何异常,我想知道是否有一种方法可以在 C# 应用程序崩溃时创建一个核心转储文件,以便我可以看到异常并通过它尝试确定导致问题的原因,就像 GDB 对 C 程序所做的那样。

我正在为我的应用程序使用 OpenSuse 12.1。

感谢您提供的任何帮助。

【问题讨论】:

    标签: c# mono crash-dumps


    【解决方案1】:

    听起来你想要一个 SuperAssert 用于 Mono。我只能找到这个 Mono mail thread。他们讨论了 Managed Debugger 到 Mono 的可能转换。不幸的是,Microsoft EULA 似乎阻止了他们移植这个。因此,您似乎需要直接使用操作系统。这是有关您如何capture a core dump

    的官方指南

    应采取以下步骤来准备捕获核心转储:

    -禁用核心转储文件的最大大小限制
    - 为存储核心转储配置一个固定位置
    -禁用 AppArmor
    - 为 setuid 和 setgid 进程启用核心转储

    快速步骤指南如下:

    运行

    ulimit -c unlimited
    

    运行

    install -m 1777 -d /var/local/dumps
    

    运行

    echo "/var/local/dumps/core.%e.%p"> /proc/sys/kernel/core_pattern
    

    运行

    rcapparmor stop
    

    运行

    sysctl -w kernel.suid_dumpable=2
    

    (重新)启动有问题的进程。

    还可以看看这个帖子:Core dump in Linux - 如果您认为应用程序可能会崩溃,也许您可​​以设置一个技术支持帮助脚本/exe 来执行上述所有操作并启动 Mono 应用程序。这将使最终用户更容易重现问题并向您发送转储以诊断问题。

    【讨论】:

      【解决方案2】:

      是的,你可以,但你只能找出 .NET exception 发生了什么,但不知道你是否可以在没有第三方软件的情况下进行核心转储。

      根据应用程序的类型,您可以挂钩以下events 之一:

      • 如果您使用Windows Forms Application,您可以订阅System.Windows.Forms.Application.ThreadException

      • 如果您使用WPF,您可以订阅System.Windows.Threading.Dispatcher UnhandledException

      • 如果你想订阅一个普通的UnhandledException事件,你可以订阅System.AppDomain.UnhandledException(但我猜如果应用程序没有足够的访问权限就无法访问这个事件)。

      【讨论】:

      • 感谢您的帮助,这是完美的解决方案,虽然不会生成核心转储,但在某些方面效果更好,因为如果发生未处理的异常,我可以处理该怎么做。 IE。使用堆栈跟踪和内部异常写入我的日志文件。再次感谢
      【解决方案3】:

      您可能想查看bug-buddy 的来源。

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多