我知道这个问题有点简单,但我觉得我错过了一些大而明显的东西。我从(http://www.droidnova.com/playing-with-graphics-in-android-part-vi,209.html)开始关注android中的图形处理教程。当我查看logcat时,它会告诉我一个行号,它认为空指针异常来自于)当我用常量替换从类中提取的数字时,空指针异常只会移动到程序中的其他位置。
在eclipse调试器中是否有某种方法可以识别它所查看的特定指针,当它不应该是null时?我得到了空指针异常,并且它会说,有一个异常,但没有关于什么指针被认为是空的信息。
此外,当我尝试输入断点进行测试时,虽然我可以让调试器出现并在断点处停止,但是logcat显示仍然抛出了空指针异常,即使断点应该在之前被触发导致异常的部分出现了。为什么忽略断点?
答案 0 :(得分:2)
在eclipse调试器中是否有某种方法可以识别它所查看的特定指针,当它不应该是什么时,它是否为null?
这里的答案是肯定和否。否:您无法告诉Eclipse指定要检查null的指针。当你在班级或功能上被打破时,你所能做的就是自己观察指针。 是:您所要做的就是分手,您可以找到该对象。例如,有问题的代码似乎是:
_currentGraphic.getCoordinates().setX((int) event.getX() - _currentGraphic.getGraphic().getWidth() / 2);
您可以将其拆分为(原谅伪,但我不知道您正在使用哪种类型):
Type _coords = _currentGraphic.getCoordinates();
Type _graphic = _currentGraphic.getGraphic();
Type _width = _graphic.getWidth();
_coords.setX((int) event.getX() - _width / 2);
现在,代码行被分解为每行一个对象,很容易确定哪个是罪犯。
为什么会忽略断点?
这个有点复杂。您的断点可能会被忽略也可能不会被忽略。一般来说,如果你要到达一个断点,它应该按顺序进入所有断点。但是,我注意到,在Eclipse中,有时候在某些情况下会忽略断点。出于某种原因,adb未与Eclipse调试器完全集成。这意味着如果在当前运行的调试过程中更改断点,它可能会也可能不会识别它们。通常它足以完全杀死应用程序并重新调整它。
此外,有时adb和调试器无法正确同步。您可以使用一个命令(最好在代码的开头),这样可以很好地帮助它。如果插入命令Debug.waitForDebugger()
,则同步将到位,允许最早的断点(第一个onCreate()和类似的断点)正常工作。该命令确实使调试速度慢得多。在关键点使用它还可以减轻之前讨论过的明显断点。
现在重要的是要注意,仅仅因为你认为它忽略了它们,并不意味着它。有时(特别是Android,现在),执行不一定经过开发人员认为它的路径。例如,可以在ViewClass(Context context)
构造函数中设置断点,当它实际上是通过带有ViewClass(Context context, AttributeSet attr)
构造函数的XML创建的。哎呀,即使是一个被遗忘的对象创造也可以完全以错误的方式引导执行。如果对象具有static
成员或在类初始化(而不是对象初始化)上运行的代码,则尤其如此。不看你的代码,我不知道发生了什么,但希望这能为你提供找到答案的工具。
希望这有帮助,
FuzzicalLogic