通过命令行从java打印完整的错误消息
我目前运行的应用程序只能通过使用java的程序/命令行运行。当我得到错误打印输出时,如何查看完整打印输出 i、 e.我如何看待“13更多”通过命令行从java打印完整的错误消息,java,Java,我目前运行的应用程序只能通过使用java的程序/命令行运行。当我得到错误打印输出时,如何查看完整打印输出 i、 e.我如何看待“13更多” 此堆栈跟踪包含您需要知道的所有信息,与控制台输出无关。它只是跳过重复的行 更新 假设您的方法调用a()调用b()和b()捕获从其他方法引发的异常foobar(),将其包装在另一个异常中并重新调用。以下是堆栈跟踪的外观: void b() { try { foobar(); } catch(Exception e) { //
此堆栈跟踪包含您需要知道的所有信息,与控制台输出无关。它只是跳过重复的行
更新 假设您的方法调用
a()
调用b()
和b()
捕获从其他方法引发的异常foobar()
,将其包装在另一个异常中并重新调用。以下是堆栈跟踪的外观:
void b() {
try {
foobar();
} catch(Exception e) {
// Stack trace for e:
// foobar()
// b()
// a()
throw new RuntimeException("error",e);
}
}
void a() {
try {
b();
} catch(Exception e) {
// Stack trace for e
// b()
// a()
// Cause:
// foobar()
// b() - repeating line
// a() - repeating line
e.printStackTrace();
}
}
所以,打印异常的代码只是跳过重复的行,因为它们没有附加值。在我的示例中,您的问题中抛出了InvocationTargetException
来代替RuntimeException
InvocationTargetException
是反射通常使用的异常。有关在您的案例中生成更多13的代码,请参阅
它统计此异常与以前打印的异常具有共同点的堆栈跟踪元素。因此,您知道必须将上面异常的最后13行(在本例中表示全部)添加到截断的跟踪中。如果无法输出到文件,这不是一个操作系统问题,而是一个Java问题吗?请参见“引起原因”部分。这是反射调用中引发的基本异常。它在InvocationTargetException
中返回为cause
,所以“13个以上”只是以前打印的内容的重复?
void b() {
try {
foobar();
} catch(Exception e) {
// Stack trace for e:
// foobar()
// b()
// a()
throw new RuntimeException("error",e);
}
}
void a() {
try {
b();
} catch(Exception e) {
// Stack trace for e
// b()
// a()
// Cause:
// foobar()
// b() - repeating line
// a() - repeating line
e.printStackTrace();
}
}