使用 TestFlight 时更好的 MonoTouch 崩溃

Posted

技术标签:

【中文标题】使用 TestFlight 时更好的 MonoTouch 崩溃【英文标题】:Better MonoTouch crashes with TestFlight 【发布时间】:2011-11-28 17:00:05 【问题描述】:

我们已经将 TestFlight 和 TestFlight SDK 与 MonoTouch 连接起来,到目前为止它运行良好。

我们注意到的一件事是崩溃报告更适合于 Obj-C 应用程序。

上传压缩的 dSYM 文件后,它们看起来像这样:

0 OurApp 0x007a7116 testflight_backtrace + 170
1 OurApp0x007a7c3c TFSignalHandler + 208
2 libsystem_c.dylib 0x34f68538 _sigtramp + 48
3 libsystem_c.dylib 0x34f5df5a pthread_kill + 54
4 libsystem_c.dylib 0x34f56fea abort + 94
5 OurApp 0x007793b3 monoeg_g_logv (goutput.c:137)
6 OurApp 0x0077941f monoeg_g_log (goutput.c:147)
7 OurApp 0x005f1393 get_numerous_trampoline (aot-runtime.c:3447)
8 OurApp 0x005f1b2f mono_aot_get_imt_thunk (aot-runtime.c:3576)
9 OurApp 0x006e2c83 initialize_imt_slot (object.c:1247)
10 OurApp 0x006e321f build_imt_slots (object.c:1371)
11 OurApp 0x006e356f mono_vtable_build_imt_slot (object.c:1439)
12 OurApp 0x005fcf83 mono_convert_imt_slot_to_vtable_slot (mini-trampolines.c:198)
13 OurApp 0x005fd50f common_call_trampoline (mini-trampolines.c:333)
14 OurApp 0x005fe573 mono_vcall_trampoline (mini-trampolines.c:644)
15 OurApp 0x0056a68f generic_trampoline_vcall (mscorlib.dll.6.s:194345)
16 OurApp 0x00416b4f System_Collections_Generic_List_1__ctor_System_Collections_Generic_IEnumerable_1_T (mscorlib.dll.6.s:32014)
17 OurApp 0x0026955b System_Linq_Enumerable_ToList_TSource_System_Collections_Generic_IEnumerable_1_TSource (System.Core.dll.6.s:1917)

因此,您可以告诉一般 C# 函数发生崩溃的位置。 (注意:这个崩溃是 MonoTouch 5.0.1 中的一个错误,其中 Linq 泛型被搞砸了,似乎在 5.0.2 中已修复)

如果能在这里获得完整的 C# 堆栈跟踪信息会很好,您有什么想法吗?我可以连接到AppDomain.UnhandledException 并在我的static void Main 方法周围放置一个try-catch,但想知道是否有办法将堆栈跟踪报告给TestFlight。

【问题讨论】:

一个小注释,以确认 5.0.1 有一个回归(即 5.0 很好),这会导致在某些情况下抛出 EngineExecutionException。这已在 5.0.2 中修复。 我也一直在探索这个问题,但我没有想出任何东西。 (老实说,我只接受行号。) 我正在考虑尝试将完整的异常详细信息作为检查点发送(尽管这不是它的用途)。不过,我不确定它在 TestFlight 上的外观。 注意:通过检查点放置堆栈跟踪看起来很可怕,不建议将其作为解决方案。 是的,我使用的是讨论中提到的最新版本,我上传了一个 dSym 文件,它在我的问题中产生了上面的输出。我的问题是由于我们使用 MonoTouch 并希望看到 C# 样式的堆栈跟踪,我们可以自己生成并报告 - 我们不知道如何将自定义堆栈跟踪传递给 TestFlight。 【参考方案1】:

我不熟悉 MonoTouch,但是使用 TestFlight SDK 的Remote Logging 功能怎么样?

【讨论】:

我在这里使用 MonoTouch 绑定:github.com/ayoung/monotouch-testflight 我不知道他是否有用于 C# 的 TFlog Obj-C 函数设置。我将尝试自己绑定所有缺少的方法,看看是否有任何方法解决了这个问题。 在这里找到了一个新的(2 月 1 日提交):github.com/mono/monotouch-bindings/tree/master/TestFlight 去试试。 好的,使用TestFlight.Log() 效果很好。您必须在AppDomain.UnhandledExceptionstatic void Main() 中记录异常。 C# 堆栈跟踪不会显示为崩溃报告,但您可以在会话日志中查看它。 你要向 TestFlight.Log 发送什么?

以上是关于使用 TestFlight 时更好的 MonoTouch 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

当我在 testflight 中使用删除方法触摸组时得到 403

TestFlight 在启动时崩溃

使用通过plugman安装的Testflight插件构建Cordova项目时找不到-lTestFlight的库

使用 TestFlight 进行内部测试时,啥是好的 iOS 应用版本控制策略?

上传到 TestFlight 时推送通知不起作用

当应用程序在使用 testflight 的设备上运行时,有啥方法可以查看日志?