【发布时间】:2017-03-02 18:26:19
【问题描述】:
背景:
我经常在 Apache Spark 上编写用于 ETL 作业的 java 代码,通常是在 cloudera CDH 集群上设置每个数据源。我正在处理的数据通常是脏的。例如对于邮政编码,我想我可以使用一个整数来表示它,但可能存在一些像“85281-281”这样的记录,我们无法将其解析为整数。因此抛出异常并且程序停止并带有一堆堆栈跟踪。
以前我必须根据我的假设编写代码,在集群上运行它,但由于大量堆栈跟踪而失败。包括引发异常的行号。但是找到根本原因确实很耗时,尤其是我没有具体的数据行。
所以我认为如下:
发生错误时代码不应停止。这很容易,使用Java的异常处理系统就可以轻松实现。
我想知道当前堆栈中导致错误的变量内容,以便找到输入的根本原因(输入中的特定行)。不仅仅是引发异常的行号。例如 NullPointerException,我想知道原始输入数据,输入文件中的哪个特定行导致了这种情况。
我们有 e.printStackTrace() 来显示堆栈跟踪中的所有函数调用。我们可以通过在当前堆栈顶部显示内容来做得更好吗?就像调试器一样?
当然,我会通过手动编码手动打印出所有变量。但我只想知道调试器是否可以使用特定函数来显示这些变量。
【问题讨论】:
-
Java 无法知道您想要查看哪些信息。 “打印变量”实际上没有任何意义。哪些变量?您希望它们如何以印刷形式呈现?运行时不知道这些事情。对于任何可能失败的给定操作,您必须使用您定义的逻辑来处理该潜在故障。
-
你可以使用
jdb