如何解决MonoTouch堆栈痕迹未详细说明
| 我正在尝试为我的MonoTouch代码实现一个有用的常规异常处理程序。 如果将处理程序附加到``0'',则根本不存在堆栈跟踪,即.StackTrace属性为null或为空。 如果我将UIApplication.Main(args)
调用包装在try {} catch {}
中,则堆栈跟踪将不包含任何有用的信息:
at MonoTouch.UIKit.UIApplication.Main (System.String[] args,System.String principalClassName,System.String delegateClassName) [0x00000] in <filename unknown>:0
at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in <filename unknown>:0
at MyNamespace.MyProduct.MyProject.Application.Main (System.String[] args) [0x00000] in <filename unknown>:0
即它没有比我捕获异常的Main()方法更深入。
有什么想法可以让我从堆栈跟踪中获取更多有用的信息,还是可以通过AOT编译将其完全优化掉? (在调试模式下,堆栈跟踪是预期的。)
解决方法
您将无法在发行代码中获取行号或文件名。该信息被删除。但是,您仍然应该能够将完整的堆栈跟踪信息放入代码中,至少可以看到类/调用层次结构。
我猜想您必须在事后对此进行调查,因为您无法调试或捕获发布版本中正在运行的异常。我倾向于将异常记录到日志文件中以供日后检查。
此过程从以下代码开始:
StackTrace trace = new StackTrace(true);
foreach(StackFrame frame in trace.GetFrames())
... log data to log file
您也可以创建带有异常的StackTrace对象。我会开始在那附近玩。请记住,在很多情况下,如果错误发生在iOS部分的深处,则您将无法获得堆栈跟踪,因为Mono没有暴露给该数据。仅发生在主要方法上的异常或崩溃通常表示较低级别的问题。
,使用--debug命令行选项或在MonoDevelop中选择配置\“ Debug | iPhone \”。
请记住,此选项将导致执行速度变慢,但在异常等情况下您将获得行号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。