在全新安装的 Visual Studio 2015 上,我创建了一个 Android 应用程序和 Android native 库。通过 DllImport 指令在应用程序代码中引用 native 库中的函数。
当我为主应用程序选择“Xamarin 调试器”并开始调试时,我能够在 C# 代码中的断点处停止,但调试器不会进入 native 函数调用。
当我选择“Microsoft 调试器”时,断点根本不起作用。 在调试 session 期间,所有断点都被标记为禁用,当我指向它们时,会出现以下消息:
当前不会命中断点。包含此断点的模块尚未加载。
在 VS2015 中调试 native Android 库需要做什么?
最佳答案
我遇到了同样的问题,我想我已经解决了。
Xamarin 调试器只能调试托管(即 C#)代码。如果正在调试的项目是托管项目,则断点仅适用于 Xamarin 调试器。如果项目是 native 应用程序或 native 库,它们将不起作用。
Microsoft 调试器只能调试 native (即 C/C++)代码。如果正在调试的项目是 native 应用程序或 native 库,或者它附加到已运行的 Android 进程,则断点仅适用于 Microsoft 调试器。
按照以下过程,我已经能够同时使用两个调试器来调试混合(托管 + native )应用程序:
- 在托管应用的属性中,为调试器选择“Xamarin”:
- 在 native 库项目的属性中,在调试下,确保调试目标和要启动的包与为托管应用选择的目标和 APK 匹配。这将确保两个调试器都指向同一个 Android 应用程序,并且如果您只想调试 native 部分,还可以让您直接使用 Microsoft 调试器启动应用程序(通过选择 native 库作为调试目标)。您可能需要浏览 APK,对于目标,您可能需要输入目标名称(如果它没有出现在下拉列表中)(目标名称是“adb devices”显示的字符串)。
- 选择要调试的托管应用,并确保调试工具栏中的目标架构和设备正确无误。例如,如果我想在我的 Nexus 4 上调试,它使用 ARM 架构,我确保选择 ARM 作为目标,而不是“任何 CPU”,并且我的 Nexus 4 设置为我的目标:
- 开始调试。此时,Xamarin 调试器处于 Activity 状态,C# 代码中的断点应该起作用。
- 当托管应用仍在运行或正在调试时,右键点击 native 库项目并选择“调试”>“附加到 Android 进程”。如果一切顺利,Microsoft 调试器将启动并附加到该应用程序(可以这么说,除了“ native 端”)。
我制作了一个简短的视频来演示:Android debugging managed and native code using Visual Studio 2015
关于c# - 在 Visual Studio 2015 中调试 native Android 库时断点不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576721/