【问题标题】:return statement ignored while debugging调试时忽略返回语句
【发布时间】:2015-05-15 20:52:56
【问题描述】:

我编写了一个创建 JSONObject 的方法,该方法曾经可以工作。突然间我表现得很奇怪。使用调试器,我可以到达返回创建的 JSONObject 的行,但它总是跳转到返回 null 的最后一行,而不进入 catch 块。调试器告诉我创建的对象是一个有效的 JSONObject。

import org.json.JSONObject;

...

JSONObject returnJson = new JSONObject();
    try {
        returnJson.put("event", event);
        returnJson.put("list", jsonArray);
        returnJson.put("type", "list");
        returnJson.put("container", container);
        Log.d(TAG, "created");
        Log.d(TAG, returnJson.toString());
        return returnJson;
    } catch (JSONException e) {
        Log.e(TAG, e.getMessage(), e);
    }
    Log.d(TAG, "null returned"); // never called in the non-debugging mode
    return returnJson;

【问题讨论】:

  • 它是否在调试器中正常工作not?也许调试器正在使用的源与类文件不同步......
  • 我不这么认为。因为我无法调试,我只能猜测,但 porject 的行为就像没有返回 json 对象一样。无论如何,我清除了所有缓存并重新启动,我无法以这种方式解决任何可能的不同步问题。
  • 你可以很容易地添加 logging 来看看它到底能走多远,而无需调试......
  • 在流程、调试或其他方面不应有任何差异。如果您在非调试模式下运行应用程序,它仍然有效吗?
  • 是的,它在非调试模式下工作。我编辑了这个问题。最后一个日志永远不会被调用。那么我该如何解决调试问题呢?

标签: java debugging android-studio


【解决方案1】:

我猜它没有击中最后一个return returnJson;,而是前一个。我的意思是try 块内的代码没有抛出异常。

我目睹了return 语句的调试器中断,在我不太了解的某些情况下实际上并没有被命中。

我刚刚写了示例代码来重现:

private static String method() {
    try {
        Class clazz = AnyClass.class;
        return clazz.getName();     // place a break point #1
    } catch(Exception ignored) { }

    String result = "An exception caught.";
    return result;                  // place another break point #2
}

它肯定会在#1 处中断然后在#2 处“停止”。这个方法实际上返回“package.name.AnyClass”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多