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

Ale*_*nko 11 c# debugging android shared-libraries visual-studio-2015

在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库需要做什么?

Ric*_*ers 9

我有同样的问题,我想我已经弄明白了.

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

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

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

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

我做了一个简短的视频来演示这个: 使用Visual Studio 2015进行Android调试托管和本机代码