Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Eclipse中调试Android/Java_Android_Eclipse_Debugging - Fatal编程技术网

如何在Eclipse中调试Android/Java

如何在Eclipse中调试Android/Java,android,eclipse,debugging,Android,Eclipse,Debugging,当我注释掉calc1.setOnClickListenerbuttonListener时;这运行得很好,当我允许它运行时,它会使我的脚本崩溃。我怎么知道发生了什么事?Logcat显示了一束红色,但我不知道怎么读 package com.example.contactwidget; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import

当我注释掉calc1.setOnClickListenerbuttonListener时;这运行得很好,当我允许它运行时,它会使我的脚本崩溃。我怎么知道发生了什么事?Logcat显示了一束红色,但我不知道怎么读

package com.example.contactwidget;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ContactWidget extends Activity {

    private static final int HELLO_ID = 1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Button calc1 = (Button) findViewById(R.id.calc_button_1);

        OnClickListener buttonListener = new View.OnClickListener() {
          public void onClick(View v) {

          }
        };

        calc1.setOnClickListener(buttonListener);

        setContentView(R.layout.main);
    }
}
更新

堆栈跟踪

E/AndroidRuntime(  339): FATAL EXCEPTION: main
E/AndroidRuntime(  339): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.contactwidget/com.example.contactwidget.ContactWidget}: java.lang.NullPointerException
E/AndroidRuntime(  339):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime(  339):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(  339):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(  339):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(  339):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  339):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  339):    at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(  339):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  339):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  339):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(  339):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(  339):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  339): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  339):    at com.example.contactwidget.ContactWidget.onCreate(ContactWidget.java:41)
E/AndroidRuntime(  339):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(  339):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime(  339):    ... 11 more

其他人可能知道如何解决这个问题,但我太新了,不知道-不过我可以帮助调试

如果您想通过LogCat进行调试,我建议您创建一个过滤器。您可以通过单击LogCat视图中的绿色+,并输入要根据哪些规则进行过滤来完成此操作。我要做的是将所有日志语句置于某个标志[log.dDEBUGTAG,message;]下,这样我就可以将过滤器设置为只查找这些标记,而不显示任何其他内容

如果你想一步一步地通过应用程序进行调试,你可以通过双击行号左边的栏来设置一个断点,在那里你希望它停止-一个小的蓝点应该会出现。然后,当您使用“调试”按钮运行程序时,它将一直运行,直到到达该断点。现在可以使用F6键转到下一行。F5将进入该功能。除其他外,还可以查看对象的当前值


希望这能有所帮助——正如我所说,我在这方面也是新手。大量的随学随用。

其他人可能知道如何解决这个问题,但我太新了,不知道-不过我可以帮助调试

如果您想通过LogCat进行调试,我建议您创建一个过滤器。您可以通过单击LogCat视图中的绿色+,并输入要根据哪些规则进行过滤来完成此操作。我要做的是将所有日志语句置于某个标志[log.dDEBUGTAG,message;]下,这样我就可以将过滤器设置为只查找这些标记,而不显示任何其他内容

如果你想一步一步地通过应用程序进行调试,你可以通过双击行号左边的栏来设置一个断点,在那里你希望它停止-一个小的蓝点应该会出现。然后,当您使用“调试”按钮运行程序时,它将一直运行,直到到达该断点。现在可以使用F6键转到下一行。F5将进入该功能。除其他外,还可以查看对象的当前值


希望这能有所帮助——正如我所说,我在这方面也是新手。大量的随学随用。

一件事是您调用setContentViewR.layout.main;最后。 在引用xml布局中的任何视图之前,必须如上所述设置内容视图

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button calc1 = (Button) findViewById(R.id.calc_button_1);

        OnClickListener buttonListener = new View.OnClickListener() {
          public void onClick(View v) {

          }
        };

        calc1.setOnClickListener(buttonListener);
    }

由于使用setContentViewR.layout.main;,尝试按id查找视图而不指定任何布局;,它返回一个calc1的空对象。

一件事是调用setContentViewR.layout.main;最后。 在引用xml布局中的任何视图之前,必须如上所述设置内容视图

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button calc1 = (Button) findViewById(R.id.calc_button_1);

        OnClickListener buttonListener = new View.OnClickListener() {
          public void onClick(View v) {

          }
        };

        calc1.setOnClickListener(buttonListener);
    }
由于使用setContentViewR.layout.main;,尝试按id查找视图而不指定任何布局;,它返回calc1的空对象。

对于您的特定情况可能是正确的

根据堆栈跟踪,您正在运行一个NullPointerException。使跟踪这些异常更容易的一个好方法是为所有未捕获的NullPointerException添加Java异常断点。我还建议打破ArrayIndexOutOfBoundsException、IllegalArgumentException和IllegalStateException

要执行此操作,请转到调试透视图窗口->打开透视图->调试或其他,然后进行调试,找到默认情况下与变量窗格组合的断点窗格,右上角,然后单击J!偶像下次遇到此异常时,您将能够准确地看到它发生的位置,而不必筛选RuntimeException输出。

可能适合您的具体情况

根据堆栈跟踪,您正在运行一个NullPointerException。使跟踪这些异常更容易的一个好方法是为所有未捕获的NullPointerException添加Java异常断点。我还建议打破ArrayIndexOutOfBoundsException、IllegalArgumentException和IllegalStateException


要执行此操作,请转到调试透视图窗口->打开透视图->调试或其他,然后进行调试,找到默认情况下与变量窗格组合的断点窗格,右上角,然后单击J!偶像下次运行此异常时,您将能够准确地看到它发生的位置,而不必筛选RuntimeException输出。

问题是,我没有记录任何内容。这是个问题吗?我想我只是假设它会抛出一个解析错误或类似于PHP中的更简单的错误,但事实绝对不是这样。你的代码是预编译的,不像PHP是经过解释的,所以如果你让它运行到一定程度,那么解析你的代码就不会有问题。它将抛出一个异常,该异常将在LogCat中显示为堆栈跟踪。您只需要花点时间来读取堆栈跟踪,它就会告诉您确切的行号
使用问题。除了1…之外,所有行号都不在我的代码中。。。。我讨厌忽视其他人。。。看起来calc1无法在其上执行.setOnClickListener,如果没有,那么如何为其添加侦听器?问题是,我没有记录任何内容。这是个问题吗?我想我只是假设它会抛出一个解析错误或类似于PHP中的更简单的错误,但事实绝对不是这样。你的代码是预编译的,不像PHP是经过解释的,所以如果你让它运行到一定程度,那么解析你的代码就不会有问题。它将抛出一个异常,该异常将在LogCat中显示为堆栈跟踪。您只需要花点时间读取堆栈跟踪,它就会告诉您导致问题的确切行号。除了1…之外,我的代码中没有所有行号。。。。我讨厌忽视其他人。。。看起来calc1无法在其上执行.setOnClickListener,如果没有,那么如何为其添加侦听器?Logcat显示一束红色,但我不确定如何读取它。。。在这里发布堆栈跟踪,我们可以帮助您阅读。为什么您要-1这个?Epic failLogcat显示一束红色,但我不知道如何阅读它。。。在这里发布堆栈跟踪,我们可以帮助您阅读。为什么您要-1这个?叙事诗fail@ccheneson你如何从stacktrace中找出错误的位置?如果我在做XML布局,stacktrace对我来说似乎没用。@sydd:stacktrace只会告诉你NPE发生的位置。从这里开始,您必须检查是否所有操作都正确,例如setContentView的位置丢失/错误,是否从正确的上下文中使用findViewById…@ccheneson,以及如何从堆栈跟踪中找出错误的位置?如果我在做XML布局,stacktrace对我来说似乎没用。@sydd:stacktrace只会告诉你NPE发生的位置。从这里开始,您必须检查是否所有操作都正确,例如setContentView的位置丢失/错误,是否从正确的上下文使用findViewById。。。