代码之家  ›  专栏  ›  技术社区  ›  monoceres

为什么android调试器不能提供有用的信息?

  •  0
  • monoceres  · 技术社区  · 14 年前

    在调试我的android应用程序时,我又一次碰壁了。

    此问题通常在活动的启动代码中出现错误时出现。

    在本例中,在自定义SurfaceView类的构造函数之后的某个地方,我得到了这个毫无价值的文本:

    Thread [<3> main] (Suspended (exception RuntimeException))  
        ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2596  
        ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2621   
        ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 126 
        ActivityThread$H.handleMessage(Message) line: 1932  
        ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
        Looper.loop() line: 123 
        ActivityThread.main(String[]) line: 4603    
        Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
        Method.invoke(Object, Object...) line: 521  
        ZygoteInit$MethodAndArgsCaller.run() line: 860  
        ZygoteInit.main(String[]) line: 618 
        NativeStart.main(String[]) line: not available [native method]  
    

    这当然和我的代码无关。

    我甚至试过遍历我的每一行代码,但是这个错误发生在方法调用之间的某个地方。

    谢谢。

    我发现了问题。一个简单的空引用。但问题仍然存在,为什么调试器不能显示这个nullpointerexception?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Gareth Davidson    14 年前

    我感觉到你的痛苦。我知道的唯一方法是让程序继续并强制关闭,然后在logcat窗格中读取日志。这似乎发生在所有代码中,这些代码是从通过本机层传递的事件调用的,据我所知,这几乎就是一切。

    我首先让程序崩溃,然后读取日志以确定在哪里放置断点,然后重新启动应用程序并检查断点处的值。这非常令人沮丧。

        2
  •  1
  •   Romain Guy    14 年前

    您正在调试器中查看当前堆栈跟踪,因此它显示程序执行的当前状态。要查看与异常相关的错误和堆栈跟踪,需要查看日志(在Eclipse中打开“logcat”视图,或在shell中使用adb logcat)

        3
  •  1
  •   Community CDub    8 年前

    调试器正在中断第一个未捕获的异常,而不是原始异常。logcat的输出是完整的。

    另见 this older answer .