Android调试器显示不一致的值,点击“不可能”断点

Android调试器显示不一致的值,点击“不可能”断点,android,gson,dalvik,Android,Gson,Dalvik,我在使用android调试器时遇到了非常奇怪的行为。GSON jar中的一行代码偶尔被命中,但不应被命中,从而导致抛出IllegalStateException。为了追踪引发异常的原因,我在异常行上设置了一个断点。然而,在暂停执行的情况下,我发现委托不知何故从null变为set 具体来说,一旦遇到断点,我会单击另一个堆栈帧,然后单击返回到带有断点的帧,然后突然设置了delegate的值。然后我强制执行if语句,我的代码继续正常运行——没有NPE或其他问题 我在我的项目中使用proguard,并且

我在使用android调试器时遇到了非常奇怪的行为。GSON jar中的一行代码偶尔被命中,但不应被命中,从而导致抛出IllegalStateException。为了追踪引发异常的原因,我在异常行上设置了一个断点。然而,在暂停执行的情况下,我发现委托不知何故从null变为set

具体来说,一旦遇到断点,我会单击另一个堆栈帧,然后单击返回到带有断点的帧,然后突然设置了delegate的值。然后我强制执行if语句,我的代码继续正常运行——没有NPE或其他问题

我在我的项目中使用proguard,并且可以在android L仿真器和手机上复制它。这可能是proguard错误、调试器错误还是gson错误

请参阅屏幕截图,了解第一次命中断点时调试器的状态,以及我在其中单击后不久调试器的状态


这是Gson.java中的第885行,看起来这是Gson中的线程问题。我正在开发的应用程序使用了改型,它有一个类GsonConverter,可以跨多个线程重用同一个Gson实例。我查看了一个线程转储,发现至少有三个线程同时使用同一个gson实例

我每次都调整GsonConverter来创建一个新的Gson实例,这似乎解决了我的问题


这是一个很难解决的问题,因为Gson会抛出一个完全不直观的JsonSyntaxException。我可能会提交一个bug。

设备和模拟器都运行5.0棒棒糖吗?我很好奇你是否在Dalvik中看到了相同的行为,或者仅仅在Art中看到了相同的行为。它也在4.3 API 18仿真器上重新编程,一直到点击调用堆栈以显示委托。这个理论就到此为止。我看得越多,就越觉得这可能是一个线程问题。我做了一个线程转储,而改型同时在3个线程上执行Gson.fromJson。。。。