java - 在源方法内部调试时无法检查 catch 子句中的变量

标签 java android android-studio bluetooth bluetooth-lowenergy

在 Android Studio 3.5.3 中调试时,我通常不会遇到问题。然而,我在 Android 源代码内部调试时偶然发现了一个问题,特别是文件 Sdk\sources\android-28\android\bluetooth\BluetoothGatt.java

一旦在下面指示的断点处暂停,变量e 就不会在“变量”选项卡中列出。不确定这是否是设计使然,如果是,其原因是什么?是什么导致有些变量可用,而有些变量不可用?各种局部变量都可用,但 e 变量不可用。

我的断点在这里,第 1259 行:

    try {
        mService.writeDescriptor(mClientIf, device.getAddress(), descriptor.getInstanceId(),
                AUTHENTICATION_NONE, descriptor.getValue());
    } catch (RemoteException e) {
        Log.e(TAG, "", e); // <-- HERE (breakpoint)
        mDeviceBusy = false;
        return false;
    }

使用的系统:

操作系统:Win 10
Android Studio:3.5.3
构建工具:29.0.2
SDK工具:26.1.1
平台工具:29.0.5
Gradle :3.5.3

测试的设备:
华为 P20 Pro(安卓 9)
华为Mate 9(Android 9)

PS Log.e语句应该将e变量中包含的堆栈跟踪打印到LogCat,但是经过彻底检查后却找不到它。因此我对异常变量的内容非常感兴趣。

Screenshot demonstrating the aforementioned issue with the debugger

最佳答案

正如评论者指出的那样,调试器实际上并没有在它指示的行上挂起。根据此信息及其单击的方法的返回值:该方法很可能在该方法前面发生的 mDeviceBusy 检查中返回 false。

此外,我在蓝牙框架(特别是 BLE)方面遇到的问题似乎是由于在操作仍在运行时调用 API 方法引起的。这可能会破坏 Android 蓝牙 API,导致 mDeviceBusy 字段保持为 true。

在我禁用了我的应用程序在连接后立即执行的一些 GATT/BLE 操作后,问题消失了。解决方案是确保一次只有一个命令处于 Activity 状态,甚至可能在命令之间增加额外的时间。

关于java - 在源方法内部调试时无法检查 catch 子句中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59680308/

相关文章:

java - Android Studio 在启动过程中卡在加载中

java - 与 SmileFactory 一起使用时出现 AbstractMethodError?

java - 如何生成哈希签名?

android - 从 Android 浏览器启动 youtube 应用程序

android - 在回收 View 中显示不同尺寸的多个图像

android-studio - Aosp 没有 tools/vendor/google3 项目

android - 使用 Floating Window Manager App 在连续点击时崩溃

java - 使用 MS Excel 2007 将 excel 文件中的数据转换为 xml

java - 添加到 stringbuffer 逗号

android - 将 SearchRecentSuggestionsProvider 与一些预定义的术语一起使用?