在没有调试器的情况下调试/识别Java问题

时间:2011-09-19 12:21:19

标签: java debugging

我希望能够在运行的Java代码中识别异常,而无需附加调试器。举个简单的例子,如果我有以下代码:

    int i = 0;
    Random rand = new Random();
    while (true)
    {
        i++;
        int number = rand.nextInt(1000);
        if (number == 20)
            throw new Exception("Error!!!");
    }

如何在异常抛出时知道“i”的值? (不附加任何调试器或添加日志/打印条目)。

我的动机是,我希望能够在客户站点识别问题,而无需将任何调试器附加到生产站点。

如果有人使用.Net或C ++提出同样的问题,我可以使用Windbg和相关的PDB获得“i”的值

谢谢!

2 个答案:

答案 0 :(得分:3)

将相关信息添加到Exception对象。

if (number == 20)
    throw new Exception("Error!!! i = " + i);

您可以使用i检索catch块中的Exception.getMessage()的值(在这种情况下,可以使用一些字符串解析;或者仅使用throw new Exception("" + i))。< / p>

答案 1 :(得分:1)

你的问题不清楚。

如果您实际上询问如何在不附加调试器或修改程序的情况下找到有关程序执行状态的信息,以添加日志记录/跟踪/任何可以提供该信息的内容....那么答案是“你做不到”。

在这种情况下,您唯一的选择是尝试推断该计划的行为。


在您的示例中,随机数生成器返回的数字(出于所有实际目的)不可预测,因此不适合推理。那通常就是它的结束。

然而,@ Thomas Jungblut的评论指出这是无关紧要的,答案是零...因为你的程序中没有任何内容在初始化后改变i的值。

但这确实不会改变“一般”答案:

  • 如果你无法追踪它/调试它,你必须对它进行推理。
  • 如果你不能解释它,你就会陷入困境。