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

Android看似无用的调试环境

  •  12
  • Mansour  · 技术社区  · 15 年前

    我刚刚开始调试我的第一个三行长的android应用程序,我似乎不能像我想的那样使用调试工具。 这是我的密码:

    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      int a = 1 / 0;
    }
    

    other method 我没有来源的系统内部。更糟糕的是,也没有例外消息。

    我正在使用最新的SDK和eclipseadt插件,并在真实设备(nexusone)上进行调试。

    3 回复  |  直到 15 年前
        1
  •  8
  •   Janusz Daniel Rindt    15 年前

    一开始我不得不承认你部分是对的。有些调试器会在出现异常时停止执行,并显示导致异常的代码行。我希望在eclipse调试器中看到这种行为。但其他答案是对的。

    在Eclipse中,转到窗口->显示视图->其他->安卓->LogCat公司 现在您将获得模拟器或连接设备上发生的所有调试输出。

    T03-18 09:45:12.398: ERROR/AndroidRuntime(1778): Uncaught handler: thread main exiting due to uncaught exception
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.client/android.client.ClientMain}: java.lang.ArithmeticException: divide by zero
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.app.ActivityThread.access$2100(ActivityThread.java:116)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.os.Handler.dispatchMessage(Handler.java:99)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.os.Looper.loop(Looper.java:123)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.app.ActivityThread.main(ActivityThread.java:4203)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at java.lang.reflect.Method.invokeNative(Native Method)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at java.lang.reflect.Method.invoke(Method.java:521)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at dalvik.system.NativeStart.main(Native Method)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778): Caused by: java.lang.ArithmeticException: divide by zero
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.client.ClientMain.onCreate(ClientMain.java:35)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     ... 11 more
    03-18 09:45:12.438: INFO/Process(52): Sending signal. PID: 1778 SIG: 3
    

    03-18 09:45:12.428: ERROR/AndroidRuntime(1778): Caused by: java.lang.ArithmeticException: divide by zero
    03-18 09:45:12.428: ERROR/AndroidRuntime(1778):     at android.client.ClientMain.onCreate(ClientMain.java:35)
    

    我想这很清楚。在ClientMain的第35行抛出了一个异常,它是一个被零除的异常。如果您不能弄清楚这一点(在一个没有示例那么清楚的情况下),您可以在这一行或方法的入口点上设置一个断点。现在调试器将向您显示所有变量,您可以逐步执行代码,直到错误发生。如果将鼠标悬停在变量上,可以看到该变量的值,现在可以逐步尝试了解异常的原因并解决它。如果你深入到代码中,你将在负责划分的java类中结束,如果你没有将jar和这个类的源代码一起添加到你的项目中,调试器此时无法向你展示一些东西。

        2
  •  2
  •   Laurence Gonsalves    15 年前

    Eclipse不是这样调试的。您需要使用LogCat查看实际的错误消息,然后找出发生错误的地方。我不记得LogCat是否显示了行号。

        3
  •  1
  •   Zordid    15 年前

    要检测这样的问题,作为程序员,您必须使用 Log

    基本上,这不是Android特有的,而是Java所共有的!