【问题标题】:Weird Xamarin.iOS bug only with Enable debug on (adhoc/release builds)奇怪的 Xamarin.iOS 错误仅与启用调试(临时/发布版本)
【发布时间】:2017-12-23 00:32:14
【问题描述】:

Xamarin.iOS 有两个奇怪的问题:

1) NavigationController.PushViewController 在启用调试而不是在禁用调试的情况下正常工作。

2) 禁用调试后,应用在大约 60 秒后崩溃,但设备上没有崩溃日志。

首先我注意到 Debug 和 AdHoc 构建之间的区别。但是现在,当我使用 AdHoc 构建并打开“启用调试”时,它会神奇地工作,无需进一步调整设置。调试符号被删除,调试信息设置为无。

几年前我在这个论坛和 forums.xamarin 上看到了另外两个类似的问题,但没有答案。我在项目上尝试了不同的链接器和编译器以及 GC 设置,但它们没有帮助。

希望有人能帮帮我。

【问题讨论】:

    标签: ios xamarin build xamarin.ios pushviewcontroller


    【解决方案1】:

    您可以使用一种技巧从设备获取有关崩溃的更多信息。由于您的所有代码都可以通过 mono 运行时执行,因此您可以通过将 UIAplication.Main 函数包装到 try-catch 块中来轻松捕获大量崩溃,并将异常字符串保存在设备上的某个位置。

    在 Main.cs 中

    public class Application {
        static void Main(string[] args) {
            try {
                UIApplication.Main(args: args, principalClassName: null, delegateClassName: typeof(AppDelegate).Name);
            } catch (Exception e) {
                // save e.ToString() somewhere
            }
        }
    }
    

    【讨论】:

    • 感谢您的回复。那什么也抓不住。感觉有点像 iOS 刚刚结束应用程序?通过添加代码来测试我是否将某些内容写入磁盘,它会稍微改变错误:现在打开一个视图可以工作一次然后停止。我得到了一些崩溃日志:异常类型:EXC_BREAKPOINT (SIGTRAP) 异常代码:0x0000000000000001, 0x000000018c1ff398 并且:异常类型:EXC_BAD_ACCESS (SIGABRT) 异常子类型:KERN_INVALID_ADDRESS at 0x0000000000000000
    • 那我敢打赌配置有问题。尝试检查您的构建选项,检查所有项目并确保它们都相同。然后尝试在调试版本中重现该问题。 (也许从那里删除调试检查,并检查是否崩溃)调试信息与崩溃关系不大,相关并不意味着因果关系。
    • 谢谢!这确实帮助我找到了导致问题的错误。原因是同时加载了其他一些视图,导致视图被多次推送。
    • @Jørgen 太棒了! :)
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 2011-04-16
    • 1970-01-01
    • 2010-10-27
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多