能够标记任何堆栈跟踪中包含的值ofString.valueOf()的对象是否有用。在我下面的例子中,我使用了“trace”。未在堆栈跟踪点处声明的变量将被嵌入。 它可以使调试变得更加容易,并且可以更容易地编写易于调试的程序。
以下代码的示例堆栈跟踪:
java.lang.NullPointerException:
at Test.main(Test.java:7) index=0, sum=3, obj=null
public class Test {
Object obj;
public void main(String[] args) trace obj {
trace int sum = 0;
for(trace int index = 0; index < args.length; index++) {
sum += Integer.parseInt(args[index]);
sum += obj.hashCode();//Will cause NullPointerException
}
}
}
来自:http://jamesjava.blogspot.com/2005/04/extra-info-in-stack-traces.html
答案 0 :(得分:1)
这可能有用,但我认为它使代码混乱 - 大概是当代码工作时你想要删除'trace'关键字;也许某种形式的元数据会更合适
然后总会有印刷声明...
答案 1 :(得分:1)
诱人,但我认为这个功能不能保证Java中的新关键字(而且语言的复杂性要高得多)。
我发现使用Throwable.printStackTrace通常可以快速指出需要我注意的问题。
答案 2 :(得分:1)
答案 3 :(得分:1)
我宁愿选择一种标准(基于注释)的方式来描述程序员意图为null(FindBugs,JSR 305)。我曾经考虑过不只是行号,而是包含在异常消息中的列号,因此在长链调用中,您可以更容易地看到哪个点运算符导致了NPE。正如其他人在StackOverflow上的NPE相关问题中所述,在大多数情况下,您可以通过尝试访问空对象上的字段/方法来获取NPE。
答案 4 :(得分:0)
是的,它非常有用。我经常自己做这种事情,但我通常只会编译成非生产代码。
答案 5 :(得分:0)
我喜欢的是异常的属性,它是所有方法签名的字符串数组,导致抛出...而不必从异常文本中解析它。
答案 6 :(得分:0)
Visual Studio C#调试器的调用堆栈窗口包含一个堆栈跟踪,其中显示了所有参数值。
答案 7 :(得分:0)
的Eh。就个人而言,我认为它不会那么有用。如果我正在运行我的代码并遇到异常,我可以更轻松地设置一个断点并进入代码,看看那时所有的变量是什么,并找出它真正破坏的地方。
使用这种跟踪方法,我不仅要在变量前面添加和删除关键字,因为我处理不同的错误,但我不认为只是添加好的日志/调试消息会有任何真正的改进(推送到制作时更容易删除或禁用)。