2017-01-16 27 views
1

使用Java異常斷點當運行一個項目中,我得到了以下錯誤關於在IntelliJ IDEA的爲ClassNotFoundException的

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

那麼我想知道哪些類使用FullGiftsActivityService所以我添加java.lang.ClassNotFoundExceptionJava Exception Breakpoints,然後我發現下面的代碼步入斷點

// 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

回答

0

你最好在指定的行上放置WebappClassLoaderBase中的斷點,而不是捕獲ClassNotFoundException - 很多時候ClassNotFoundException將作爲Web應用程序的類加載機制的一部分拋出並捕獲,因此所有'噪聲'你看到了。只有在定義了名稱的塊中捕獲到異常時,「名稱」纔有意義。你可能不在正確的塊中。

一般來說,如果您在tomcat中遇到類加載問題,我會打開org.apache.catalina.loader的日誌記錄來調試,而不是嘗試使用調試器。