c# - Xamarin.iOS 版本 Appstore 应用程序中的人类可读异常处理

标签 c# ios exception xamarin.ios

是否有任何“标准”和自动化的方式从 Xamarin.iOS 发布的 Appstore 应用程序获取堆栈跟踪?

很久以前,当我在 Xcode 中编写 native iOS 4.0 应用程序时,从发布二进制文件获取异常堆栈跟踪存在一个巨大的问题:应用程序将非 symb 堆栈发送到我的服务器,我下载它们,解析 dSYM 文件并用真正的方法替换地址。甚至为此编写了 java 帮助程序。但它是一个脆弱的结构(多种架构、更新二进制格式等),很久以前我发现它不再正常工作了。不需要它,我只是忘记了。

在 android 和 Win/Wp 中,我得到托管堆栈,因为我需要主要了解我的 C# 代码中的错误。

但现在我在 VisualStudio 中使用 Monogame 和 Xamarin.iOS 编写了一个应用程序:

            AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
            {               
                Ut.saveStringToFile("exceptions.log", args.ExceptionObject.ToString());
            };

但在 Xamarin.iOS 应用程序中,我发现我不能立即使用堆栈:即使在模拟器上,一些行也被删除了(尽管我在发布版本中关闭了 LLVM 和优化)指向一些地址。

现代程序员如何从 Xamarin.iOS 应用程序中获取堆栈?没有隐藏的 api(我打算将应用发布到 Appstore)和 testflight(对于免费应用所有者来说,如今使用第三方服务可能太贵了)。

最佳答案

令人惊讶的是,它已经足够了:

        try
        {
            AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
            {
                Exception e = args.ExceptionObject as Exception;
                String s = (e!=null) ? ("Error Handled: " + e.Message + "\n" + e.StackTrace) :
                    ("Error Handled (not Exception): " + args.ExceptionObject.ToString());
                Ut.saveStringToFile("exceptions.log", s);

            };
        }
        catch (Exception)
        {
        }

在项目设置中(至少我为临时构建所做的):iOS Build-> 启用调试,Build->Optimize code = off,Build->Advanced->DebugInfo = Full。

在崩溃后的 exceptions.log 中,我得到了带有行号的堆栈跟踪。 我玩过 Hockeyapp,关闭了那些调试设置,但提供了 dSym。不知道为什么我应该使用曲棍球应用程序(即使是免费的),因为它产生与简单处理程序相同的堆栈。我自己编写的在线错误跟踪器比庞大的 msft 结构更简单,但也可以存储/搜索/排序堆栈。 没有奇迹。唉。

问题仍然是:如何在发布的 AdHoc/AppStore 二进制文件堆栈中查看行号? (dSym 只处理 native 代码,有关托管代码的调试信息在 pdb 中)

关于c# - Xamarin.iOS 版本 Appstore 应用程序中的人类可读异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37769297/

相关文章:

ios - 将 NSString 转换为 NSAttributedString 无需 alloc init

ios - XCode iOS operator 新的自定义实现

c# - 如何从抽象类中的静态方法获取当前类型?

c# - LINQ to Entities 和多对多

objective-c - 使用未声明的标识符 self

ios - 无法在 UINavigationController 上设置后退按钮

java - 如何避免Java中的 "Exception in thread "main“java.util.ConcurrentModificationException”错误

java - 未报告的异常处理

c# - Fluent NHibernate 加入不使用主键

c# - 在 Xdocument 中添加 xmlns 命名空间