我希望能够在运行的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”的值
谢谢!
答案 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
的值。
但这确实不会改变“一般”答案: