关于在intellij idea中使用java异常断点进行ClassNotFoundException

时间:2017-01-16 12:31:31

标签: intellij-idea

运行项目时,我得到以下错误

Caused by: java.lang.ClassNotFoundException: com.foo.coupon.service.FullGiftsActivityService
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1858)

然后我想知道使用哪个类FullGiftsActivityService所以我添加了Java Exception Breakpoints java.lang.ClassNotFoundException,然后我在下面的代码中找到了断点

// findClass:381, URLClassLoader(java.net)
if (result == null) {
    throw new ClassNotFoundException(name); // 381 
}

我能理解它,因为它有一个显式的throw语句,然后我恢复,它跳转到

// loadClass:436, ClassLoader(java.lang)  
    return c;
} // 436

enter image description here

但这次我无法理解,为什么会跳到这段代码?

另外两种情况都有name变量并且是String类型,所以为了忽略这些噪声,我添加了这个条件

enter image description here

为什么它说cannot resolve symbol 'name',那么如何只捕获这个类 - FullGiftsActivityService

1 个答案:

答案 0 :(得分:0)

最好在指定行上的WebappClassLoaderBase中放置断点而不是捕获ClassNotFoundException - 很多时候会抛出ClassNotFoundException并将其作为webapp的类加载机制的一部分捕获,因此所有'噪音'你看到了。这个名字'只有在定义了name的块中捕获到异常时才有意义。你可能不在正确的街区。

一般情况下,如果您在tomcat中遇到类加载问题,我会调查org.apache.catalina.loader的日志记录进行调试,而不是尝试使用调试器。