【问题标题】:Breakpoints don't work while debugging native Android library in Visual Studio 2015在 Visual Studio 2015 中调试本机 Android 库时断点不起作用
【发布时间】:2023-03-08 14:04:01
【问题描述】:

在全新安装 Visual Studio 2015 时,我创建了一个 Android 应用程序和 Android 本机库。本机库中的函数通过 DllImport 指令在应用程序代码中引用。

当我为主应用程序选择“Xamarin 调试器”并开始调试时,我可以在 C# 代码中的断点处停止,但调试器不会进入本机函数调用。

当我选择“Microsoft 调试器”时,断点根本不起作用。 在调试会话期间,所有断点都被标记为禁用,当我指向它们时,会出现以下消息:

The breakpoint will not currently be hit. Module containing this breakpoint has not yet loaded.

在 VS2015 中调试原生 Android 库需要做什么?

【问题讨论】:

  • 为了能够获得断点,您需要使用调试选项编译这些库。如果您没有消息来源,那么您就不走运了。
  • 我自己在调试模式下构建了库。有任何线索为什么我会收到此错误吗?是否有关于这个主题的指南,有人成功完成了吗?
  • 谢谢,我会尝试您所引用问题的建议。不确定这是否真的是我的情况。

标签: c# android debugging shared-libraries visual-studio-2015


【解决方案1】:

这篇文章中描述的技巧解决了我的问题:

https://blogs.msdn.microsoft.com/cesardelatorre/2016/02/06/solving-issue-with-vs-android-emulator-xamarin-apps-and-intel-skylake-processor-i-e-when-using-a-microsoft-surface-book-i7-surface-pro-4-etc/

解决方案:

我们是对的!在最新的 Intel (Skylake) 处理器上运行时,此问题与 Windows 10 上的 Hyper-V 有关。 (感谢 VS Android Emulator 团队的 Mike,他提出了这种可能的解决方法)。

热修复它:

  • 在 Hyper-V 管理器中,右键单击您正在使用的 Android VM。
  • 点击设置
  • 展开“处理器”,选择“兼容性”
  • 启用“迁移到具有不同处理器版本的物理计算机”

您可以在必须选择的复选框下方看到。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我想我已经解决了。

    Xamarin 调试器只能调试托管(即 C#)代码。如果要调试的项目是托管项目,则断点仅适用于 Xamarin 调试器。如果项目是本机应用程序或本机库,则它们不起作用。

    Microsoft 调试器只能调试本机(即 C/C++)代码。仅当正在调试的项目是本机应用程序或本机库,或者如果它附加到已运行的 Android 进程时,断点才能与 Microsoft 调试器一起使用。

    按照以下过程,我已经能够同时使用两个调试器来调试混合(托管+本机)应用程序:

    • 在托管应用的属性中,为调试器选择“Xamarin”:
    • 在本机库项目的属性中,在调试下,确保调试目标和要启动的包与为托管应用选择的目标和 APK 匹配。这将确保两个调试器都指向同一个 Android 应用程序,如果您只想调试本机部分,还允许您直接使用 Microsoft 调试器启动应用程序(通过选择本机库作为调试目标)。您可能需要浏览 APK,如果目标名称没有出现在下拉列表中,您可能需要输入目标名称(目标名称是“adb devices”显示的字符串)。
    • 选择要调试的托管应用,并确保调试工具栏中的目标架构和设备正确。例如,如果我想在使用 ARM 架构的 Nexus 4 上进行调试,我确保选择 ARM 作为目标,而不是“任何 CPU”,并且我的 Nexus 4 设置为我的目标:
    • 开始调试。此时,Xamarin 调试器处于活动状态,C# 代码中的断点应该可以正常工作。
    • 当托管应用仍在运行或调试时,右键单击本机库项目并选择调试 > 附加到 Android 进程。如果一切顺利,Microsoft 调试器也将启动并附加到应用程序(可以说是“本机端”除外)。

    我制作了一个短视频来演示这一点:Android debugging managed and native code using Visual Studio 2015

    【讨论】:

    • Richard,这太棒了,你已经想出来了。我当时放弃了在VS2015 beta中调试原生代码的想法,但现在我想我会再试一次。
    • 今晚可以为我节省几个小时的重要一点 - 确保未选中“将程序集捆绑到本机代码”复选框。我们团队的某个人更改了配置,将其签入源代码管理,然后让我追尾。
    猜你喜欢
    • 2018-04-02
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多