Android调试器显示不一致的值,命中"不可能"断点

时间:2015-01-29 19:43:14

标签: android gson dalvik

我在使用android调试器时遇到了非常奇怪的行为。 GSON jar中的一行代码偶尔被点击,不应该被命中,导致抛出IllegalStateException。为了追踪抛出异常的原因,我在它的行上设置了一个断点。然而,当执行暂停时,我发现代理以某种方式从null更改为set。

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

我在我的项目中使用proguard,并且可以在android L模拟器和手机上重现这一点。这可能是一个程序错误,一个调试器错误,还是一个gson错误?

在首次点击断点时查看调试器状态的屏幕截图,然后在我点击其中之后不久。

State when breakpoint hit State after i click to another stack frame and then return

这是在Gson.java,第885行

1 个答案:

答案 0 :(得分:0)

看起来这是Gson中的一个线程问题。我正在使用的应用程序使用retrofit,它有一个类GsonConverter,可以跨多个线程重用相同的Gson实例。我查看了一个线程转储,并且至少看到了三个同时使用相同gson实例的线程。

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

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