在使用Visual Studio 2015调试本机Android库时,断点无法正常工作。

11
在安装全新的Visual Studio 2015后,我创建了一个Android应用程序和Android本地库。通过DllImport指令,在应用程序代码中引用本地库函数。
当我选择“Xamarin调试器”作为主应用程序并开始调试时,我能够停在C#代码的断点上,但是调试器不会进入本地函数调用。
当我选择“Microsoft调试器”时,断点根本不起作用。在调试会话期间,所有断点都标记为禁用状态,当我指向它们时,出现以下消息: “此断点当前无法命中。尚未加载包含此断点的模块。”
我需要做什么才能在VS2015中调试本地Android库呢?

1
为了能够获取断点,您需要使用调试选项编译这些库。如果您没有源代码,则很遗憾。 - Satish Chalasani
1
可能是重复的问题,参考链接:(https://dev59.com/O3I95IYBdhLWcg3wyBGc) - Satish Chalasani
我自己以调试模式构建了库。你有什么线索为什么会出现这个错误吗?也许有关于这个主题的指南,有人成功地完成了吗? - Aleksei Petrenko
谢谢,我会尝试你引用的问题中的建议。虽然我不确定这是否真的适用于我的情况。 - Aleksei Petrenko
2个回答

9
我遇到了同样的问题,但我想我已经找到解决方法了。
Xamarin调试器只能调试托管代码(即C#代码)。如果正在调试的项目是托管项目,断点仅在使用Xamarin调试器时有效。如果该项目是本机应用程序或本机库,则断点不起作用。
Microsoft调试器只能调试本机代码(即C/C++代码)。如果正在调试的项目是本机应用程序或本机库,或者它已连接到已运行的Android进程,则断点仅在使用Microsoft调试器时有效。
我已经成功地同时使用两个调试器来调试混合(托管+本机)应用程序,按照以下步骤操作:
在托管应用程序的属性中,选择“Xamarin”作为调试器: 托管应用程序属性页面截图,显示已选择Xamarin调试器 在本地库项目的属性中,在调试下,确保Debug Target和Package to Launch与选定的托管应用程序的目标和APK匹配。这将确保两个调试器都指向同一个Android应用程序,并且还可以让您直接使用Microsoft调试器启动应用程序(通过将本地库选择为要调试的目标),如果您只想调试本地部分。您可能需要浏览APK,并且对于目标,如果它没有出现在下拉菜单中,则可能需要键入目标名称(目标名称是“adb devices”显示的字符串)。 Android应用程序本地部分的调试设置 选择托管应用程序进行调试,并确保调试工具栏中的目标体系结构和设备正确。例如,如果我想在我的Nexus 4上进行调试,该设备使用ARM架构,则我确保选择了ARM作为目标,而不是“Any CPU”,并将我的Nexus 4设置为目标: 调试混合托管/本地Android应用程序的调试工具栏设置 开始调试。此时,Xamarin调试器已激活,并且C#代码中的断点应该正在工作。
在托管应用程序仍在运行或被调试的情况下,右键单击本地库项目,然后选择Debug> Attach to Android process。如果一切顺利,则Microsoft调试器也将启动并附加到应用程序(除了“本地部分”,可以这么说)。 菜单选项,用于将Microsoft调试器附加到混合应用程序的"本地部分" 我录制了一个简短的视频来展示这个过程:使用 Visual Studio 2015 调试 Android 的托管代码和本机代码

Richard,太棒了,你已经搞定了。我曾经放弃在VS2015 beta中调试本地代码的想法,但现在我想再试一次。 - Aleksei Petrenko
1
今晚本来可以省下几个小时的重要提示 - 确保未选中“将程序集捆绑到本机代码”复选框。我们团队中的某个人更改了配置,将其检入源代码控制,并让我一直在忙碌。 - Paul Schroeder

4
这篇帖子中描述的提示解决了我的问题:

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/

解决方案:

我们是正确的!问题与在最新的英特尔(Skylake)处理器上运行的Windows 10上的Hyper-V有关。 (感谢VS Android模拟器团队的Mike提出了这个可能的解决方法)。

如何解决:

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

您可以在下面看到要选择的复选框。 Hyper-V虚拟机>配置>处理器>兼容性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接