C# MonoTouch堆栈跟踪未详细说明

C# MonoTouch堆栈跟踪未详细说明,c#,exception-handling,xamarin.ios,C#,Exception Handling,Xamarin.ios,我正在尝试为我的MonoTouch代码实现一个有用的通用异常处理程序 如果我将处理程序附加到AppDomain.CurrentDomain.UnhandledException,则根本不存在堆栈跟踪,即.StackTrace属性为null或空 如果在try{}catch{}中包装我的UIApplication.Main(args)调用,堆栈跟踪不包含任何有用的信息: at MonoTouch.UIKit.UIApplication.Main (System.String[] args, Syst

我正在尝试为我的MonoTouch代码实现一个有用的通用异常处理程序

如果我将处理程序附加到AppDomain.CurrentDomain.UnhandledException,则根本不存在堆栈跟踪,即.StackTrace属性为null或空

如果在
try{}catch{}
中包装我的
UIApplication.Main(args)
调用,堆栈跟踪不包含任何有用的信息:

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 
位于:0中的MonoTouch.UIKit.UIApplication.Main(System.String[]args,System.String principalClassName,System.String delegateClassName)[0x00000]
在:0中的MonoTouch.UIKit.UIApplication.Main(System.String[]args)[0x00000]处
在:0中的MyNamespace.MyProduct.MyProject.Application.Main(System.String[]args)[0x00000]处
i、 它没有比我捕获异常的Main()方法更深入

有没有办法在堆栈跟踪中获得更多有用的信息,或者AOT编译完全优化了这些信息?(堆栈跟踪与调试模式下的预期一致。)

使用--debug命令行选项或在MonoDevelop中选择配置“debug | iPhone”


请记住,此选项将导致执行速度减慢,但您将在异常等情况下获取行号。

您将无法在发布代码中获取行号或文件名。这些信息被删去了。但是,您应该仍然能够在代码中获得完整的堆栈跟踪,至少可以看到类/调用层次结构

我猜您一定是事后才开始研究这个问题,因为您无法调试或捕获发布版本上运行的异常。我倾向于将我的异常记录到日志文件中,以便稍后检查

此过程从以下代码开始:

    StackTrace trace = new StackTrace(true);

    foreach(StackFrame frame in trace.GetFrames())
        ... log data to log file

您也可以创建StackTrace对象,但有一个例外。我会开始在那里玩。请记住,在许多情况下,如果错误发生在iOS部分的深处,则无法获得堆栈跟踪,因为Mono没有暴露于该数据。只有主方法出现的异常或崩溃通常表示较低级别的问题。

如问题所述,我知道这在调试模式下可以正常工作。我想在发布的代码中包含这个处理程序——但如果所有调试信息都被剥离,那就没有意义了。问题是-在发布模式代码中没有办法获得堆栈跟踪吗?