更好的MonoTouch崩溃处理与TestFlight

43

我们已经将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。


1
一个小提示,确认5.0.1版本存在一个回归问题(即5.0版本没有问题),会导致在某些情况下抛出EngineExecutionException异常。这个问题已经在5.0.2版本中修复。 - poupou
1
我也一直在探索这个问题,但是我还没有想出什么解决方法。(说实话,我只想知道行号。) - vlad259
2
我在考虑尝试将完整的异常细节作为检查点发送(尽管这不是它的用途)。但我不确定在TestFlight上它会看起来如何。 - jonathanpeppers
1
是的,我正在使用那个讨论中提到的最新版本,我上传了一个dSym文件,在我的问题中产生了上面的输出。 我的问题是由于我们使用MonoTouch并希望看到C#风格的堆栈跟踪,我们可以自己生成并报告 - 只是我们不知道如何将自定义堆栈跟踪传递给TestFlight。 - jonathanpeppers
1
这是一个老问题 - 但对于任何正在搜索的人,我们在Monotouch应用程序中使用Raygun.io非常成功。它收集了更好和完整的堆栈跟踪。 - Ender2050
显示剩余7条评论
1个回答

3

我在这里使用了MonoTouch绑定:https://github.com/ayoung/monotouch-testflight,但我不知道他是否已经设置了TFlog Obj-C函数以供从C#中使用。我将尝试自己绑定所有缺失的方法,并查看它们是否能解决这个问题。 - jonathanpeppers
1
在这里找到了更新的版本(2月1日提交):https://github.com/mono/monotouch-bindings/tree/master/TestFlight,打算试一下。 - jonathanpeppers
1
好的,使用TestFlight.Log()相当不错。你需要在AppDomain.UnhandledExceptionstatic void Main()中记录异常。C#堆栈跟踪将不会显示为崩溃报告,但是你可以在会话日志中查看它。 - jonathanpeppers
你正在发送什么到TestFlight.Log? - Piotr Tomasik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接