繁体   English   中英

为Mono C#应用程序生成核心转储

[英]Generate Core Dump for Mono C# Application

我目前正在研究在单声道下运行的ac#linux应用程序。 虽然,我相信我已经处理了可能在我的程序中抛出的任何可能的异常,但是我应该错过任何异常,我想知道是否有一种方法,当C#应用程序崩溃时它会创建一个核心转储文件,所以我可以看到例外并通过它来尝试确定导致问题的原因,如GDB对C程序的影响。

我在我的应用程序中使用OpenSuse 12.1。

感谢您的任何帮助,您可以提供。

听起来你想要一个SuperAssert for Mono。 我只能找到这个Mono 邮件线程 他们讨论了将Managed Debugger转换为Mono的可能性。 不幸的是,Microsoft EULA似乎阻止了他们移植这个。 因此,您似乎需要直接使用操作系统。 以下是有关如何捕获核心转储的官方指南

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

- 禁用核心转储文件的最大大小限制
- 配置固定位置以存储核心转储
-Disable 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

(重新)开始有问题的过程。

另请看一下这个线程: Linux中的核心转储 - 如果您认为应用程序可能崩溃,也许您可​​以设置技术支持帮助程序脚本/ exe来执行上述所有操作并启动Mono应用程序。 这将使最终用户轻松重现问题并向您发送转储以诊断问题。

你可能想看看bug-buddy的来源。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM