【问题标题】:Eclipse debugging Android app - debugger shows wrong line executingEclipse 调试 Android 应用程序 - 调试器显示执行错误的行
【发布时间】:2013-03-24 22:13:47
【问题描述】:

在我的应用程序中实现 Twitter 集成时,我发现了 Eclipse 调试器的以下奇怪之处。这是什么原因造成的?

我正在使用此 AsyncTask 使用 twitter4j 3.0.3 从 twitter 获取请求令牌。

    public class TwitterRequestAsync extends AsyncTask<Void, Void, RequestToken> {

        private Context context;

        public TwitterRequestAsync(Context context) {

            this.context = context;
        }

        @Override
        protected RequestToken doInBackground( Void... params ) {

            Twitter twitter = getTwitter();     // getTwitter() is in enclosing class
            try {
                RequestToken token = twitter.getOAuthRequestToken();
                return token;
            }
            catch (TwitterException e) {
                Log.e( TAG, e.getMessage(), e );
                return null;
            }
        }

        @Override
        protected void onPostExecute( RequestToken result ) {

            super.onPostExecute( result );
            if ( result != null ) {
                // stuffs concerning request token here
            }
        }

    }

当我调试此代码时,似乎在执行 getOAuthRequestToken() 时引发了异常,并且调试器显示执行的下一行在 catch 子句中,返回 null;

但是,返回给 onPostExecute(...) 的结果是一个有效的请求令牌,所以调试器正在做一些奇怪的事情。我已经清理了我的项目并多次重新启动 Eclipse,但这种行为没有改变。我坏了吗?

【问题讨论】:

    标签: android eclipse debugging dalvik


    【解决方案1】:

    这是一个已知问题。看来这可能是 Dalvik VM 的问题。该方法的最后一个返回语句显示在调试器中执行。

    将 doInBackground 正文更改为:

            @Override
            protected RequestToken doInBackground( Void... params ) {
    
                Twitter twitter = getTwitter();
                RequestToken token = null;
                try {
                    token = twitter.getOAuthRequestToken();
                }
                catch (TwitterException e) {
                    Log.e( TAG, e.getMessage(), e );
                }
                return token;
            }
    

    使执行看起来按预期进行。

    请参阅 https://groups.google.com/forum/?fromgroups=#!topic/android-developers/DEU6JmdyFyM 以获取有关该问题的旧提,并提供指向更早提及的链接。终于有人在https://code.google.com/p/android/issues/detail?id=34193为此创建了一个问题。

    【讨论】:

      【解决方案2】:

      正如您的自我回答所指出的,这是一个已知问题。我想指出它(和其他怪癖)记录在 Dalvik 文档中。您可以在official but raw 表单或unofficial but formatted 中找到它——跳至“已知问题和限制”。

      如果文档更显眼就好了。

      【讨论】:

      • 感谢您链接 Dalvik 文档!我在搜索中没有遇到这种情况。事实上,我在搜索中很少遇到这种行为,这也是我在这里发布它的主要原因。
      • “dx”转换器引入了一些奇怪的东西,但如果它认为您以后可能会附加调试器,它确实会生成性能较差但调试性能优越的代码。参见例如我在groups.google.com/forum/?fromgroups=#!topic/android-platform/… 上的帖子。 IIRC,返回组合的东西更难解开。
      猜你喜欢
      • 2014-03-15
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多