上下文
我正在使用VS 2017.3开发Xamarin.Forms应用程序。我正在尝试诊断代码中出现异常的位置和原因。我可以使用SDK Android Emulator(HAX x86)成功地部署、运行和调试我的应用程序。然而,如果发生异常,我看不到任何有关异常的信息,请参阅所附图片,设置。
问题
这在Android调试中是正常的,还是缺少了什么?
……和我的构建设置:
pgx2nnw81#
我想扩展@Uraitz的答案,因为它帮助我找到了问题所在。首先,正如他所解释的,您需要在Activity中添加一个事件处理程序,如以下代码所示:
protected override void OnCreate(Bundle savedInstanceState) { ... //subscribe to unhandled event AppDomain.CurrentDomain.UnhandledException += CurrentDomainUnhandledException; ... } private void CurrentDomainUnhandledException(object sender, UnhandledExceptionEventArgs e) { System.Diagnostics.Debug.WriteLine(e.ToString()); }
在我的例子中,我在CurrentDomainUnhandledException中放置了一个断点,这样我就可以检查异常。然而,即使有了那个断点,我运行代码时仍然得到一个令人困惑的无调用堆栈错误。
CurrentDomainUnhandledException
在这一点上,我认为解决方案不起作用。事实上,它是,但我不得不点击播放(继续)按钮多次之前,我的应用程序将击中断点:
在点击那个按钮两次后,我终于击中了断点:
如果你想在调试器中获得调用栈,你必须在它可用之前深入几个级别,但是你可以通过查看事件参数来实现。
这个故事的寓意是--如果你已经添加了事件处理程序,但你仍然没有命中断点(或看到输出)--继续单击Continue按钮!
yqyhoc1h2#
只要继续,然后查看输出,它将向您显示异常的堆栈跟踪。最好学习如何通读日志文件以查找有关异常的信息。
92vpleto3#
您可以在每个平台的主构造函数上订阅UnhandledException事件,这将在中断调试之前给予有关异常的更多信息。例如在Android中:
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity { protected override void OnCreate(Bundle bundle) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(bundle); //subscribe to unhandled event AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; global::Xamarin.Forms.Forms.Init(this, bundle); LoadApplication(new App()); } private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { System.Diagnostics.Debug.WriteLine(e.ToString()); } }
如果你需要每个平台的解释,请询问他们:)
vcudknz34#
删除bin和obj文件夹解决了我的问题。
kwvwclae5#
我有类似的问题,调查后,我只需要禁用Xamarin督察。
nwo49xxi6#
我只是把这个扔在混合。我得到了一个“没有兼容的代码运行”错误时,试图打破其他'工作'的代码。在与此作斗争之后,我决定回到一个旧版本的visual studio,在那里它没有发生。这给了我重新设置异常设置的想法,然后问题就消失了。看起来,任何给定的库都可能抛出许多已处理的异常,如果您选择在特定条件下中断,您很可能会看到这一点。
6条答案
按热度按时间pgx2nnw81#
我想扩展@Uraitz的答案,因为它帮助我找到了问题所在。
首先,正如他所解释的,您需要在Activity中添加一个事件处理程序,如以下代码所示:
在我的例子中,我在
CurrentDomainUnhandledException
中放置了一个断点,这样我就可以检查异常。然而,即使有了那个断点,我运行代码时仍然得到一个令人困惑的无调用堆栈错误。
在这一点上,我认为解决方案不起作用。事实上,它是,但我不得不点击播放(继续)按钮多次之前,我的应用程序将击中断点:
在点击那个按钮两次后,我终于击中了断点:
如果你想在调试器中获得调用栈,你必须在它可用之前深入几个级别,但是你可以通过查看事件参数来实现。
这个故事的寓意是--如果你已经添加了事件处理程序,但你仍然没有命中断点(或看到输出)--继续单击Continue按钮!
yqyhoc1h2#
只要继续,然后查看输出,它将向您显示异常的堆栈跟踪。最好学习如何通读日志文件以查找有关异常的信息。
92vpleto3#
您可以在每个平台的主构造函数上订阅UnhandledException事件,这将在中断调试之前给予有关异常的更多信息。
例如在Android中:
如果你需要每个平台的解释,请询问他们:)
vcudknz34#
删除bin和obj文件夹解决了我的问题。
kwvwclae5#
我有类似的问题,调查后,我只需要禁用Xamarin督察。
nwo49xxi6#
我只是把这个扔在混合。我得到了一个“没有兼容的代码运行”错误时,试图打破其他'工作'的代码。
在与此作斗争之后,我决定回到一个旧版本的visual studio,在那里它没有发生。这给了我重新设置异常设置的想法,然后问题就消失了。
看起来,任何给定的库都可能抛出许多已处理的异常,如果您选择在特定条件下中断,您很可能会看到这一点。