有没有"标准"以及从Xamarin.iOS发布Appstore app获取堆栈跟踪的自动化方法?
很久以前,当我在Xcode中编写原生iOS 4.0应用程序时,从发布二进制文件中获取异常堆栈跟踪存在一个巨大的问题:应用程序将非符号堆栈发送到我的服务器,我下载了它们,解析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应用程序中获取堆栈?没有隐藏的apis(我计划将应用程序发布到Appstore)和testflight(现在使用第三方服务对于免费应用程序所有者来说可能太昂贵了。)
答案 0 :(得分:1)
令人惊讶的是它已经足够了:
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)
{
}
在项目设置中(至少我为adhoc构建做了):iOS Build->启用调试,构建 - >优化代码=关闭,构建 - >高级 - > DebugInfo =完全。
在崩溃后的exceptions.log中,我得到了带有行号的堆栈跟踪。 我已经与Hockeyapp一起玩这些调试设置,但提供了dSym。不知道为什么我应该使用曲棍球应用程序(即使是免费),当它产生像简单处理程序一样的堆栈。我自编的在线bugtracker比巨大的msft构造更简单,但也可以存储/搜索/排序堆栈。 没有奇迹。唉。
问题仍然是:如何在发布AdHoc / AppStore二进制文件的堆栈中查看行号? (dSym只处理本机代码,托管代码的调试信息在pdb中)
答案 1 :(得分:0)
Microsoft的HockeyApp与Xamarin配合得很好,最多可以免费使用2个应用。它包括测试分发和崩溃报告和分析。