簡體   English   中英

通過命令行從Java打印出完整的錯誤消息

[英]Print out full error message from java via commandline

我當前正在運行一個只能通過使用Java的程序命令行運行的應用程序。 當我打印出錯誤時,如何查看完整的打印件?

即我如何看待“另外13個”

Exception:
        java.lang.reflect.InvocationTargetException
        (rethrown as com.comsol.util.exceptions.FlException)
Messages:
        Error running java class
        - Detail: Error_running_java_class

Stack trace:
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.comsol.util.application.CsBaseApplication.runExternalClassStat(Unknown Source)
        at com.comsol.util.application.CsBaseApplication.runExternalClass(Unknown Source)
        at com.comsol.util.compile.a$a.a(Unknown Source)
        at com.comsol.util.compile.a$a.call(Unknown Source)
        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
        at java.util.ArrayList.RangeCheck(Unknown Source)
        at java.util.ArrayList.get(Unknown Source)
        at Enviornment.makeNextGen(Enviornment.java:269)
        at Enviornment.main(Enviornment.java:44)

        ... 13 more

此堆棧跟蹤包含您需要了解的所有內容,並且與控制台輸出無關。 它只是跳過重復的行。


更新。

假設您的方法調用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是反射通常使用的異常。

請參閱http://www.docjar.com/html/api/java/lang/Throwable.java.html#671,以獲取根據您的情況生成13 more代碼的代碼。

它計算此異常與先前打印的異常共有的堆棧跟蹤元素。 因此,您知道必須將上述異常中的最后13行(在本例中是全部)添加到截斷的跟蹤中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM