2008-09-19 38 views

回答

1

过程中的错误提供了尽可能多的信息可能是一件好事,对吧?

帮助追踪错误。

编辑:(是)

-1

你扔NullPointerException?我想你应该在代码中做null验证。 我也会考虑使用开源记录工具,如Log4J

2

这取决于。如果你得到堆栈跟踪,很明显什么类抛出异常。这通常会导致确保你的环境会在没有出现异常时给你堆栈跟踪。

+2

堆栈跟踪通常只给你的行号,所以如果一个以上的对象是在该行引用你仍然不知道导致异常 – Thomas 2008-09-19 04:33:46

0

是的,这将是有益的。特别是如果您有一种机制,屏幕上显示错误消息(exception.getMessage()),但实际的堆栈跟踪会隐藏在您无法立即访问的日志文件中。

0

不,我不认为这完全是“有用的”。

相反,你应该小心不要把NPE放在第一位。在使用它们之前检查您的值(null验证)等。这应该发生在之前您调用库方法和之后您得到的结果(如果API指定该方法可能会返回null。当然,有时它会这样做,但这是一个错误)。

如果您认为NPE应该携带此信息进行调试,请再考虑一下。这是调试器的优点。一个例外就是告诉你出了什么问题。请记住,未经检查的异常在运行时发生 - 必须在那里生成。为了知道哪个变量包含null字节代码必须知道变量名称。你不想用这样的东西来膨胀你的字节码。类名包含在我从我的程序中收到的每个日志输出中。这就是日志记录的好处。

Java通过为您提供行号和完整堆栈跟踪,已经大大简化了调试过程。 C程序因Segmentation fault而失败。您必须使用strace或调试器才能获得如此多的信息。

注意javac确实包括编译时间选项,在编译时包含的源文件的信息,但是这是为了通过一个调试器一起使用,是抛出随机例外。引用孙的javac手册页:

 
      -g Generate all debugging information, including local variables. 
       By default, only line number and source file information is 
       generated. 

      -g:none 
       Do not generate any debugging information. 

      -g:{keyword list} 
       Generate only some kinds of debugging information, specified 
       by a comma separated list of keywords. Valid keywords are: 

       source
Source file debugging information lines Line number debugging information vars Local variable debugging information

长话短说:使用调试器。

+2

在生产中具有难以复制的问题,实在不是一个好选项。 – 2008-10-14 17:06:51

相关问题