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
什么';在Android上的Eclipse中调试有什么问题?_Android_Eclipse_Debugging - Fatal编程技术网

什么';在Android上的Eclipse中调试有什么问题?

什么';在Android上的Eclipse中调试有什么问题?,android,eclipse,debugging,Android,Eclipse,Debugging,可能重复: 我显然被VisualStudio宠坏了,因为尽管我只是在学习Android和Eclipse环境,但在Eclipse中调试应用程序正成为进一步开发的严重障碍 例如,Eclipse将编译这个除以零的代码: public class Lesson2Main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundl

可能重复:

我显然被VisualStudio宠坏了,因为尽管我只是在学习Android和Eclipse环境,但在Eclipse中调试应用程序正成为进一步开发的严重障碍

例如,Eclipse将编译这个除以零的代码:

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

        int i = 1 / 0;

        TextView tv = new TextView (this);
        tv.setText ("Hello, Android!");
        setContentView (tv);
    }
}
然后,当它在调试器下执行它时,我将得到一个无用的调试信息的全屏,其中没有一个实际指向包含错误的特定行

stackTrace在exception('e')信息树中为空,它只是声明一条声明“arithmetricException”的消息。(太好了,你能告诉我你找到它的方向吗!)

我已经看遍了整个屏幕,对于这个IDE不能正确实现这一点感到困惑。使用Eclipse进行开发是否会让所有人回到1991年使用printf()像每隔一段时间记录日志一样追踪bug?真的

是否有我缺少的配置或插件可以帮助实现这一点

我还没有用XCode测试过这个案例,但如果iPhone开发人员IDE更像Visual Studio那样处理这个问题,那么Android marketplace的应用如此之少也就不足为奇了


我对Android很兴奋,但Eclipse似乎正在阻碍我的发展。

你正在经历一个典型的问题,即使用物理设备而不是机器上的软件进行开发

它将指向特定错误(发布信息,我们可以向您展示),只需在错误中查找您的包名,它将显示引发异常的位置

您还应该使用断点逐步完成该过程,并查看DDMS调试器应该满足所有需要的要求

是的,您应该使用logging Log.i(标记“Info:+x”)


您无法预测所发生的一切,并且随着代码库的增长,您会很高兴尽早开始这样做。

是的,您错过了Eclipse中一个非常重要的插件“LogCat”。它捕获Android程序提供的所有调试日志,无论是在模拟器上运行还是在真实手机上运行。后者显然需要将手机插入计算机,而不太明显的是,需要启用应用程序->开发->启用USB调试中的设置

LogCat消息为您提供了导致错误的全部原因,包括行号。要在Eclipse中打开LogCat,请转到窗口->显示视图->其他->Android(列表中的一个文件夹)->LogCat。然后将LogCat窗口停靠在您可以轻松看到它的地方,Eclipse将记住该位置,并在下次启动时再次打开它


(有时LogCat和Emulator会彼此断开连接。解决这个问题的简单方法就是关闭Eclipse和Emulator,然后重新启动它们。)

我在LogCat中得到以下堆栈跟踪:

03-31 17:01:11.272: ERROR/AndroidRuntime(205): java.lang.RuntimeException: Unable to start activity ComponentInfo{MyClass}: java.lang.ArithmeticException: divide by zero
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.access$2100(ActivityThread.java:116)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.os.Looper.loop(Looper.java:123)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.main(ActivityThread.java:4203)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at java.lang.reflect.Method.invokeNative(Native Method)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at java.lang.reflect.Method.invoke(Method.java:521)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at dalvik.system.NativeStart.main(Native Method)
03-31 17:01:11.272: ERROR/AndroidRuntime(205): Caused by: java.lang.ArithmeticException: divide by zero
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at MyClass.onCreate(MyClass.java:40)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
03-31 17:01:11.272: ERROR/AndroidRuntime(205):     ... 11 more
这是非常清楚的。查看堆栈跟踪的第14行中导致异常的代码,它显示: 除以零。这就是你做错的事。 下一行是:在MyClass.onCreate(MyClass.java:40)中,这将是发生异常的行。我不明白这会有什么困难,或是没用。VS将如何表达这一点?

(在评论中有太多的话要说,所以我写下这一点作为答案。)

您可以将Eclipse配置为在捕获、未捕获或同时捕获这两种异常时停止。默认情况下,Eclipse将在任何未捕获的异常上中断,并将忽略所有捕获的异常(即被try/catch块阻塞的任何异常)

Android的情况有点奇怪,因为您运行的是一个应用程序框架,而不是一个独立的应用程序。从上面发布的堆栈跟踪中可以看到,异常实际上是由ActivityThread捕获的。这意味着您的初始异常被认为是“捕获”的,并且在ActivityThread重新抛出它之前,不会在未捕获处理时触发Eclipse中断。因此,当调试器停止时,您在调试器中看到的堆栈与您的代码相去甚远

因为你知道你得到了一个算术异常,你可以让它在“捕获”的异常实例上被打断,它会在抛出的时候停止。(不要让它在所有捕获的异常上都中断——您将无休止地点击“resume”。)


就日志记录“延迟”而言,如果调试器让程序继续执行直到日志记录发生,您将无法在抛出点进行调试。

在开始Android开发后的几周内,我对LogCat窗口中缺少信息感到沮丧。我会将日志消息放在我的应用程序中,但从未看到它们,我知道我的应用程序会抛出异常,但我也从未看到这些异常

终于有一天我发现:我的LogCat窗口显示的设备是错误的。我通常在任何时候都会有两到三台安卓设备连接到我的电脑上,LogCat会显示其中一台设备。要更改此设置,您必须显示“设备”窗口并在该窗口中选择所需的设备


我发现这是一个非常糟糕的UI示例。在这里,我正在查看一个LogCat窗口,在该窗口中没有任何地方显示我正在查看的设备日志。我必须有足够的知识来打开一个完全不同的窗口并在那里选择设备。我真的浪费了好几个星期的时间才弄明白这一点。你可能认为LogCat会默认为所有设备,或者至少会自动切换到你最近启动应用程序的设备,但事实并非如此。如果你正把头撞在桌子上,想知道为什么LogCat这么没用,也许这就是原因。

我很惊讶代码会导致运行时异常,Android编译器不会不断地折叠吗?奇怪。我也是一个沮丧的VS用户,已经习惯了android+eclipse。android使用标准的javac编译器。如果您编写了“inti=5/3”,它将生成代码