Xamarin Android调试:没有兼容代码运行

ubof19bj  于 2023-06-20  发布在  Android
关注(0)|答案(6)|浏览(167)

上下文

我正在使用VS 2017.3开发Xamarin.Forms应用程序。我正在尝试诊断代码中出现异常的位置和原因。
我可以使用SDK Android Emulator(HAX x86)成功地部署、运行和调试我的应用程序。
然而,如果发生异常,我看不到任何有关异常的信息,请参阅所附图片,设置。

问题

这在Android调试中是正常的,还是缺少了什么?

……和我的构建设置:

pgx2nnw8

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中放置了一个断点,这样我就可以检查异常。
然而,即使有了那个断点,我运行代码时仍然得到一个令人困惑的无调用堆栈错误。

在这一点上,我认为解决方案不起作用。事实上,它是,但我不得不点击播放(继续)按钮多次之前,我的应用程序将击中断点:

在点击那个按钮两次后,我终于击中了断点:

如果你想在调试器中获得调用栈,你必须在它可用之前深入几个级别,但是你可以通过查看事件参数来实现。

这个故事的寓意是--如果你已经添加了事件处理程序,但你仍然没有命中断点(或看到输出)--继续单击Continue按钮!

yqyhoc1h

yqyhoc1h2#

只要继续,然后查看输出,它将向您显示异常的堆栈跟踪。最好学习如何通读日志文件以查找有关异常的信息。

92vpleto

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());
        }
}

如果你需要每个平台的解释,请询问他们:)

vcudknz3

vcudknz34#

删除bin和obj文件夹解决了我的问题。

kwvwclae

kwvwclae5#

我有类似的问题,调查后,我只需要禁用Xamarin督察

nwo49xxi

nwo49xxi6#

我只是把这个扔在混合。我得到了一个“没有兼容的代码运行”错误时,试图打破其他'工作'的代码。
在与此作斗争之后,我决定回到一个旧版本的visual studio,在那里它没有发生。这给了我重新设置异常设置的想法,然后问题就消失了。
看起来,任何给定的库都可能抛出许多已处理的异常,如果您选择在特定条件下中断,您很可能会看到这一点。

相关问题