c# - 在 Visual Studio 2015 中调试 native Android 库时断点不起作用

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

在全新安装的 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”: Screenshot of managed app property page showing Xamarin debugger selected
  • 在 native 库项目的属性中,在调试下,确保调试目标和要启动的包与为托管应用选择的目标和 APK 匹配。这将确保两个调试器都指向同一个 Android 应用程序,并且如果您只想调试 native 部分,还可以让您直接使用 Microsoft 调试器启动应用程序(通过选择 native 库作为调试目标)。您可能需要浏览 APK,对于目标,您可能需要输入目标名称(如果它没有出现在下拉列表中)(目标名称是“adb devices”显示的字符串)。 Debugging settings for native part of Android app
  • 选择要调试的托管应用,并确保调试工具栏中的目标架构和设备正确无误。例如,如果我想在我的 Nexus 4 上调试,它使用 ARM 架构,我确保选择 ARM 作为目标,而不是“任何 CPU”,并且我的 Nexus 4 设置为我的目标: Debug toolbar setup for debugging hybrid managed/native Android app
  • 开始调试。此时,Xamarin 调试器处于 Activity 状态,C# 代码中的断点应该起作用。
  • 当托管应用仍在运行或正在调试时,右键点击 native 库项目并选择“调试”>“附加到 Android 进程”。如果一切顺利,Microsoft 调试器将启动并附加到该应用程序(可以这么说,除了“ native 端”)。 Menu options for attaching Microsoft debugger to "native side" of your hybrid app

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

关于c# - 在 Visual Studio 2015 中调试 native Android 库时断点不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576721/

相关文章:

c# - 使用 Windows 调试器调试 C# 源代码

使用 Logcat 和模拟器进行 Android 调试。可能吗?

c# - Reflect.Emit 动态类型内存爆炸

c# - 读取 JDF 文件

java - 如何将 lambda 用于自定义 SingleObserver

android - 什么是 Android keystore 文件,它的用途是什么?

c# - UWP BLE Advertising 读取数据

c# - Visual Studio 代码(使用 C#): While putting debugger point then showing me "No Symbol loaded for this document"

java - 相机位图/图像保存后加载滑动层

debugging - pytest:如何在测试的函数中显示来自logging.debug的消息