我目前正在研究在单声道下运行的 ac# linux 应用程序。虽然,我相信我已经处理了程序中可能抛出的任何异常,但是如果我错过了任何异常,我想知道是否有一种方法可以在 C# 应用程序崩溃时创建一个核心转储文件,以便我可以看到异常并通过它尝试确定导致问题的原因,就像 GDB 对 C 程序所做的那样。
我正在为我的应用程序使用 OpenSuse 12.1。
感谢您的任何帮助,您可以提供。
我目前正在研究在单声道下运行的 ac# linux 应用程序。虽然,我相信我已经处理了程序中可能抛出的任何异常,但是如果我错过了任何异常,我想知道是否有一种方法可以在 C# 应用程序崩溃时创建一个核心转储文件,以便我可以看到异常并通过它尝试确定导致问题的原因,就像 GDB 对 C 程序所做的那样。
我正在为我的应用程序使用 OpenSuse 12.1。
感谢您的任何帮助,您可以提供。
听起来你想要一个用于 Mono的SuperAssert 。我只能找到这个 Mono邮件线程。他们讨论了 Managed Debugger 到 Mono 的可能转换。不幸的是,Microsoft EULA 似乎阻止了他们移植这个。因此,您似乎需要直接使用操作系统。这是有关如何捕获核心转储的官方指南
应采取以下步骤来准备捕获核心转储:
-禁用核心转储文件的最大大小限制 -
配置用于存储核心转储的固定位置 -禁用
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 应用程序。这将使最终用户更容易重现问题并向您发送转储以诊断问题。
是的,你可以,但你只能找出.NET exception
发生了什么,但不知道你是否可以在没有第三方软件的情况下进行核心转储。
根据应用程序的类型,您可以挂钩以下之一events
:
如果你使用Windows Forms Application
你可以订阅System.Windows.Forms.Application.ThreadException
如果你使用WPF
你可以订阅System.Windows.Threading.Dispatcher UnhandledException
如果您想订阅一般UnhandledException
事件,您可以订阅System.AppDomain.UnhandledException
(但我猜如果应用程序没有足够的访问权限则无法访问此事件)。
您可能想查看bug-buddy的来源。