【发布时间】:2020-01-10 10:57:01
【问题描述】:
在 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
摇篮:3.5.3
测试的设备:
华为 P20 Pro (Android 9)
华为 Mate 9 (Android 9)
PS Log.estatement 应该将 e 变量中包含的堆栈跟踪打印到 LogCat,但是经过彻底检查后无处可寻。所以我对异常变量的内容很感兴趣。
Screenshot demonstrating the aforementioned issue with the debugger
【问题讨论】:
-
我也喜欢
mDeviceBusy的值与刚刚分配的值相反 :) 我怀疑您遇到“源代码与字节码不匹配”的情况,也许您收到了该警告,但驳回了吗?您可以通过单步调试器进行仔细检查,并查看它是否立即返回“false”,或者您可以通过尝试单步执行mService.writeDescription()函数来检查它。 -
是的,我在某个时候看到了这个警告。进入
writeDescription使其跳转到BluetoothDevice.java:971 中注释块的中间。我注意到this 回答提到了一个解决方案;从设备中提取 .oat 文件并将它们转换为 jar 文件。然而,我对如何让 Android Studio 指向自定义 Android 源进行调试并不了解。 -
也许见here。另请注意,很可能不会发生异常;您只认为一个是断点位置的 b/c,这当然是错误的。
标签: java android android-studio bluetooth bluetooth-lowenergy