gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:59:09 24 4
gpt4 key购买 nike

是否有任何“标准”和自动化的方式从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com