Seb*_*nik 36 eclipse debugging android
可能重复:
Android看似无用的调试环境
我显然被Visual Studio宠坏了,因为虽然我只是在学习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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当它在调试器下执行时,我将获得一个无用的调试信息的全屏,其中没有实际指向包含错误的特定行.
stackTrace在异常('e')信息树中为空,它只是声明一条消息,指出'ArithmeticException'.(那很好,你怎么指向我找到它的方向!?)
我看了整个屏幕,我很困惑,这个IDE无法做到这一点.使用Eclipse进行开发是否会让所有人回到1991年,而printf()就像每个时间间隔记录一样,然后追踪错误?认真.
是否有我缺少的配置或插件来帮助解决这个问题?
我没有用XCode测试过这种情况,但是如果iPhone开发了.IDE处理这个更像Visual Studio,然后难怪Android市场有这么少的应用程序.
我对Android很兴奋,但似乎Eclipse正在阻碍它.
Ste*_*ley 25
是的,你错过了一个非常重要的Eclipse插件"LogCat".它可以捕获Android程序提供的所有调试日志,无论是在模拟器上运行还是在真实手机上运行.后者显然要求将手机插入计算机,不太明显,应用程序 - >开发 - >启用USB调试中的设置将被启用.
LogCat消息为您提供导致错误的完整细分,包括行号.要在Eclipse中打开LogCat,请转到Window - > Show View - > Other - > Android(列表中的一个文件夹) - > LogCat.然后将LogCat窗口停靠在您可以轻松查看的位置,Eclipse将记住该位置并在下次启动时再次打开它.
(有时LogCat和模拟器会相互脱离.解决这个问题的简单方法就是关闭Eclipse和模拟器,然后重新启动它们.)
fad*_*den 11
(评论中有太多话要说,所以我写这个作为答案.)
您可以将Eclipse配置为停止捕获,未捕获或两者都有的异常.默认情况下,Eclipse将中断任何未捕获的异常,并将忽略所有捕获的异常(即任何被try/catch块阻塞的异常).
Android的事情有点奇怪,因为你在应用程序框架中运行,而不是独立的应用程序.从上面发布的堆栈跟踪中可以看出,ActivityThread实际上捕获了异常.这意味着您的初始异常被视为"已捕获",并且在ActivityThread重新抛出它之前不会触发Eclipse的未破解处理.因此,您在调试器停止时看到的堆栈远不及您的代码.
既然你知道你正在获得一个ArithmeticException,你可以让它在该异常的"捕获"实例上中断,并且它将在抛出点停止.(不要在所有被捕获的例外情况下打破它 - 你将无休止地打"恢复".)
对于"迟到"的日志记录,如果调试器让程序继续执行直到记录发生,那么您将无法在抛出点进行调试.
Jan*_*usz 10
我在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
Run Code Online (Sandbox Code Playgroud)
这很清楚.查看堆栈跟踪第14行中的导致异常,它说:除以零.这就是你做错了.下一行说:在MyClass.onCreate(MyClass.java:40)这将是异常发生的行.我不会得到什么困难,或无用的.VS如何呈现这个?
| 归档时间: |
|
| 查看次数: |
15116 次 |
| 最近记录: |