Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在堆栈跟踪中隐藏长类路径以使其可读?_Java_Eclipse_Debugging_Stack Trace_Readability - Fatal编程技术网

Java 如何在堆栈跟踪中隐藏长类路径以使其可读?

Java 如何在堆栈跟踪中隐藏长类路径以使其可读?,java,eclipse,debugging,stack-trace,readability,Java,Eclipse,Debugging,Stack Trace,Readability,堆栈跟踪通常会从长类路径中变得非常冗长,以至于读取它们非常痛苦。下面是一个例子: 1) No implementation for java.util.Set< com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview. helpers.databaseitem.itemmanipulators.ItemManipulator< com.mydomain.myapp.flash.

堆栈跟踪通常会从长类路径中变得非常冗长,以至于读取它们非常痛苦。下面是一个例子:

    1) No implementation for java.util.Set<
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.
helpers.databaseitem.itemmanipulators.ItemManipulator<
 com.mydomain.myapp.flash.Cat>> annotated with
 @com.google.inject.assistedinject.Assisted(value=) was bound.
      while locating
 java.util.Set<
  com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.
  helpers.databaseitem.itemmanipulators.ItemManipulator<
   com.mydomain.myapp.flash.Cat>> annotated with 
   @com.google.inject.assistedinject.Assisted(value=)
1)java.util.Set没有实现<
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview。
helpers.databaseitem.ItemManipulator.ItemManipulator<
com.mydomain.myapp.flash.Cat>>注释为
@已绑定com.google.inject.assistedinject.Assisted(值=)。
定位时
java.util.Set<
com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview。
helpers.databaseitem.ItemManipulator.ItemManipulator<
com.mydomain.myapp.flash.Cat>>注释为
@com.google.inject.assistedinject.assided(值=)

如果我可以修剪类路径,只显示类名和方法,它将如下所示:

1) No implementation for 
   Set<ItemManipulator<Cat>> annotated with @Assisted(value=) was bound.
   while locating Set<ItemManipulator<Cat>> annotated with @Assisted(value=)
1)没有实现
已绑定用@Assisted(value=)注释的集。
查找用@Assisted(value=)注释的集时


我第一次问这个问题是作为一个例子,但意识到它通常适用于堆栈跟踪。有没有办法将Java或Eclipse配置为本机执行此操作?如果没有,是否有插件或外部工具来完成此任务?

要生成更可读的跟踪,请将堆栈跟踪粘贴到Notepad++和以下正则表达式中。同样的表达式也可以在脚本语言中使用

我将跟踪粘贴到并使用以下搜索和替换设置

搜索模式
\w[a-z\d\u\.]+.([a-z][a-Za-z\d\u]*)

替换为
\1


搜索设置
匹配大小写
已启用,
正则表达式
搜索模式。

如果使用logback,则可以使用layout以任何方式输出日志


将java.lang.String之类的类输出为j.l.String在堆栈跟踪中非常常见

您可以设置默认的
UncaughtExceptionHandler
并在打印到
System.err
之前修改堆栈跟踪。您可能需要使用正则表达式,但这将起作用:

    Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread t, Throwable e) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PrintStream ps = new PrintStream(baos);
            e.printStackTrace(ps);
            String withoutClasspaths = baos.toString().replaceAll("(\\w+\\.){2,}(\\w*)", "$2");
            System.err.println(withoutClasspaths);
        }
    });