我目前正在开发一个在mono下运行的c#linux应用程序。虽然,我相信我已经处理了可能在我的程序中抛出的任何可能的异常,但是我应该错过任何异常,我想知道是否有一种方法,当C#应用程序崩溃时它会创建一个核心转储文件,所以我可以看到例外并通过它来尝试确定导致问题的原因,如GDB对C程序的影响。
我正在将OpenSuse 12.1用于我的应用程序。
感谢您提供的任何帮助。
答案 0 :(得分:1)
听起来你想要Mono的SuperAssert。我只能找到这个Mono mail thread。他们讨论了将Managed Debugger转换为Mono的可能性。不幸的是,Microsoft EULA似乎阻止了他们移植这个。因此,您似乎需要直接使用操作系统。以下是关于capture a core dump
的官方指南应采取以下步骤准备捕获核心转储:
- 禁用核心转储文件的最大大小限制
- 配置用于存储核心转储的固定位置
-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
(重新)开始有问题的过程。
另请查看此主题:Core dump in Linux - 如果您认为应用程序可能崩溃,也许您可以设置技术支持帮助程序脚本/ exe来执行上述所有操作并启动Mono应用程序。这将使最终用户可以轻松地重现问题并向您发送转储以诊断问题。
答案 1 :(得分:0)
您可能需要查看bug-buddy的来源。
答案 2 :(得分:0)
答案 3 :(得分:0)
是的,你可以,但你只能找出.NET exception
发生的事情,不管你是否可以在没有第三方软件的情况下进行核心转储。不过。
根据应用程序的类型,您可以挂钩以下events
之一:
如果您使用Windows Forms Application
,则可以订阅System.Windows.Forms.Application.ThreadException
如果您使用WPF
,则可以订阅System.Windows.Threading.Dispatcher UnhandledException
如果您想订阅一般UnhandledException
事件,可以订阅System.AppDomain.UnhandledException
(但我想如果应用程序没有足够的访问权限,则无法访问此事件)