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

时间:2017-09-21 12:50:38

标签: visual-studio xamarin xamarin.forms

上下文

我正在使用VS 2017.3来开发Xamarin.Forms应用程序。我正在尝试诊断代码中出现异常的位置和原因。

我可以使用SDK Android Emulator(HAX x86)成功部署运行和调试我的应用程序。

但是,如果发生异常,我看不到有关异常的任何信息,请参阅附图,设置。

问题

这在Android调试中是正常的,还是我遗漏了什么?

enter image description here

...和我的构建设置:

enter image description here

6 个答案:

答案 0 :(得分:5)

我想扩展@Uraitz的答案,因为它可以帮助我找出问题所在。

首先,按照他的解释,您将要在活动中添加事件处理程序,如以下代码所示:

    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内放置了一个异常,以便可以检查该异常。

但是,即使有那个断点,我也运行了我的代码,仍然遇到一个令人困惑的no-callstack错误。

enter image description here

在这一点上,我认为解决方案无效。实际上是这样,但是我必须多次单击“播放(继续)”按钮,我的应用才能达到断点:

enter image description here

单击该按钮两次 之后,我终于找到了断点:

enter image description here

如果要在调试器中获取调用堆栈,则必须先进行几个层次的深入研究,但可以通过查看事件args参数来实现。

enter image description here

故事的寓意是-如果您添加了事件处理程序,但仍然没有达到断点(或看到输出),请继续单击“继续”按钮!

答案 1 :(得分:4)

您可以在每个平台主构造函数上订阅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());
        }
}

如果您需要每个平台解释请求他们:)

答案 2 :(得分:4)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

我得到了类似的问题,经过调查,我只需要禁用 Xamarin Inspector

enter image description here

答案 5 :(得分:0)

我会把它混在一起。 尝试中断否则“有效”的代码时,出现“未运行兼容代码”错误。

在为此苦苦挣扎之后,我决定回到没有发生这种情况的旧版本的Visual Studio。 这使我有了重设例外设置的想法,然后问题消失了。

似乎任何给定库都可能抛出许多已处理的异常,如果您选择在特定条件下中断,则很可能会看到此情况。