在 Visual Studio 2015 中调试本机 Android 库时断点不起作用

Breakpoints don't work while debugging native Android library in Visual Studio 2015

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

当我 select "Xamarin debugger" 主应用程序并开始调试时,我能够在 C# 代码中的断点处停止,但调试器不会进入本机函数调用。

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

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

我需要做什么才能在 VS2015 中调试本机 Android 库?

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

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

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

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

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

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

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

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/

解决方案:

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

急需修复:

  • 在 Hyper-V 管理器中,右键单击您正在使用的 Android VM。
  • 点击设置
  • 展开"Processor"、select"Compatibility"
  • 启用"Migrate to a physical computer with a different processor version"

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