【问题标题】:How can I find a mysterious message being printed? [closed]如何找到正在打印的神秘消息? [关闭]
【发布时间】:2013-11-28 03:45:48
【问题描述】:

好的,所以我有一个非常大的 Java 项目,我已经从事了多年(如果你必须知道的话,一个游戏)。

不幸的是,一条神秘的消息已开始打印。无论搜索多长时间,我都无法确定消息的位置。

我知道您可以覆盖 println 方法,我很好奇是否可以将某种调试信息附加到正在打印的消息中?就像打印它的行或文件一样?我尝试在 Google 上搜索此问题,但问题太详细了,我无法找到答案。

更糟糕的是,信息非常模糊。它只是“-1”。

至少我现在知道使用适当的记录器而不是简单地 println()。

【问题讨论】:

  • 有什么理由不显示 grep 吗?我的第一个想法是使用某种模拟框架来拦截函数调用并打印堆栈跟踪。
  • 希望您的非常大的项目以允许单元测试和模拟的模块化方式编写。否则我不知道你应该如何解决这个问题,除了重新编写它以便它可测试的。您的问题没有提供足够的信息,无法直接回答。
  • 我假设您使用的是 IDE?例如,在 Eclipse 中,您可以在所有项目空间中搜索方法调用或纯字符串(如 -1),我会搜索字符串“-1”,在某个地方,某个地方必须定义它,您可以从那里跟踪它.除非它来自外部 .jar,否则很难找到它。
  • 谢谢亚当,我会调查的。 HovercraftFullOfEels,这不是一个超级大的项目,只是大到足以阻碍我找到它的能力。 arynaq 是的,我使用 Eclipse。我已经尝试过了,但我没有更多选择可以尝试,所以我可能不得不继续这样做。
  • 可以在println(String x)方法imgur.com/Z4zKTLy中放一个条件断点@

标签: java println


【解决方案1】:

在这种情况下,您可以在 ide 中使用 条件断点。这是 ide 的一个非常有用的功能,但并不总是广为人知。

您设置了一个断点,并希望它仅在某些情况下暂停应用程序,在这种情况下,println 方法的参数是您的“神秘的 ufindable 字符串”

Intelllij IDEA 的情况下,它看起来像这样:

【讨论】:

  • 好吧,我这样做了,现在我忘记了消息。哈克,但对我来说已经足够了:)
【解决方案2】:

你可以的

 new Exception().printStackTrace()

或类似的,而不抛出创建的异常来获取当前执行点的完整堆栈跟踪。而且没有必要扔。您可以将它们保存到列表中以供以后处理。

【讨论】:

  • 我会试试这个。谢谢,安德烈。
【解决方案3】:

这看起来像是来自 ArrayIndexOutOfBoundsException 的消息。在此类异常上添加断点。试试这个:

String[] arr = new String[0];
try{
    System.out.println(arr[-1]);
}catch (Exception e){
    System.out.println(e.getMessage());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2013-06-05
    • 2014-11-09
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多