聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

WEB常見Bug MyEclipse/Eclipse調式技巧詳解

來源:CSDN 時間:2023-03-14 08:34:45

一. MyEclipse/Eclipse 調式技巧

1. 條件斷點

斷點大家都比較熟悉,在Eclipse Java 編輯區的行頭雙擊就會得到一個斷點,代碼會運行到此處時停止。條件斷點,顧名思義就是一個有一定條件的斷點,只有滿足了用戶設置的條件,代碼才會在運行到斷點處時停止。


(資料圖)

在斷點處點擊鼠標右鍵,選擇最后一個"Breakpoint Properties"

斷點的屬性界面及各個選項的意思如下圖,

2. 變量斷點

斷點不僅能打在語句上,變量也可以接受斷點,

上圖就是一個變量的打的斷點,在變量的值初始化,或是變量值改變時可以停止,當然變量斷點上也是可以加條件的,和上面的介紹的條件斷點的設置是一樣的。

3. 方法斷點

方法斷點就是將斷點打在方法的入口處,

方法斷點的特別之處在于它可以打在 JDK的源碼里,由于 JDK 在編譯時去掉了調試信息,所以普通斷點是不能打到里面的,但是方法斷點卻可以,可以通過這種方法查看方法的調用棧。

4. 改變變量值

代碼停在了斷點處,但是傳過來的值不正確,如何修改一下變量值保證代碼繼續走正確的流程,或是說有一個異常分支老是進不去,能不能調試時改一下條件,看一下異常分支代碼是否正確?

在Debug 視圖的 Variables 小窗口中,我們可以看到 mDestJarName 變量的值為 "F:\Study\eclipsepro\JarDir\jarHelp.jar "

我們可以在變量上右鍵,選擇"Change Value..." 在彈出的對話框中修改變量的值,

或是在下面的值查看窗口中修改,保用Ctr+S 保存后,變量值就會變成修改后的新值了。

5. 重新調試

這種調試的回退不是萬能的,只能在當前線程的棧幀中回退,也就說最多只能退回到當前線程的調用的開始處。

回退時,請在需要回退的線程方法上點右鍵,選擇 "Drop to Frame"

6. 遠程調試

用于調試不在本機上的程序,有兩種方式,1、本機作為客戶端2、本機作為服務端使用遠程調試的前提是服務器端和客戶端的代碼是一致的。 本機作為客戶端本機作客戶端比較常用,需要在遠端的服務器上的java程序在啟動時打開遠程調試開關,服務器端需要加上虛擬機參數1.5以前版本(1.5以后也可用):【-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 】1.5及以上版本:【 -agentlib:jdwp=transport=dt_socket,server=y,address=8000】F:\Study\eclipsepro\screensnap>java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -jar screensnap3.jar

連接時遠程服務器時,需要在Eclipse中新建一個遠程調試程序

這里有一個小地方需注意,連接上的時候貌似不能自動切換到Debug視圖,不要以為本機的調試程序沒有連接到服務器端。本機作為服務端

同本機作為客戶端相比,只需要修改一下“Connection Type”

這時Eclipse會進入到等待連接的狀態

連接程序使用如下參數即可連接本機服務器,IP地址請用實現IP替換~~【-agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000】F:\Study\eclipsepro\screensnap>java -agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000 -jar screensnap3.jar遠程調試時本地的代碼修改可同步到遠程,但不會寫到遠程的文件里,也就是說本地修改會在下次啟動遠程程序時就沒有了,不會影響到下次使用時的遠程代碼。有關遠程調試更詳細點的介紹請參考【使用 Eclipse 遠程調試 Java 應用程序】好像漏了一個斷點,異常斷點,補一下。

7. 異常斷點

經常遇見一些異常,然后程序就退出來了,要找到異常發生的地方就比較難了,還好可以打一個異常斷點,

上圖中我們增加了一個NullPointException的異常斷點,當異常發生時,代碼會停在異常發生處,定位問題時應該比較有幫助。

7. EXpressions

通過添加表達式 Expressions 來查看各變量的值。  點擊右邊 “X+Y=?”(Add a new watch expression) 符號。

點擊OK 可以查看結果如下:(查看結果相當方便吧,個人感覺比變量窗口更有用!)

二. 常見Bug及解決辦法

1. 整合Spring框架

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name "sessionFactory" defined in class path resource [beans.xml]: Cannot resolve reference to bean "dataSource" while setting bean property "dataSource"; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named "dataSource" is defined  at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:192) at org.springframework.beans.factory.annotation.InjectionMetadata.injectMethods(InjectionMetadata.java:117) at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:302)

... 39 more

解決辦法:

@Resource(name="sessionFactory") //添加了此語句 public void setSessionFactoryDI(SessionFactory sessionFactory){System.out.println("sessionFactory"+sessionFactory); //調用父類的setSessionFactory方法,注入sessionFactory super.setSessionFactory(sessionFactory);

}

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name "sessionFactory" defined in class path resource [beans.xml]: Cannot resolve reference to bean "dataSource" while setting bean property "dataSource"; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named "dataSource" is defined at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)  at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) ... 57 more

解決辦法:

classpath:hibernate.cfg.xml

2. Tomcat 無法開啟 Directory Listing

修改Tomcat安裝路徑C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf下web.xml例如下面的代碼:defaultorg.apache.catalina.servlets.DefaultServletdebug0listingstrue1

3. wowo

wom

20. 導入web項目前面有個紅色感嘆號

Unbound classpath container: "JRE System Library [jdk1.7.0_80]" in project "ar_v1.0.0"項目右鍵屬性--->Build Path--->Configure Build Path--->Libraries

如圖:選中JRE System Library [JavaS3E1.7] 然后Remove掉,

刪掉后再重新添加JRE,如圖:

進入后如下圖所示,可以選擇工作空間默認的jre,也可以重新添加外部的,如果選擇默認的點擊完成即可,如果添加外部的,點擊箭頭指向的按鈕,重新選擇外部JRE路徑地址即可

完成后可看到如下圖所示,JRE沒有在報錯了,點擊OK即可。

21. JavaWeb項目中沒有錯,但是項目上面顯示一個紅叉

考慮JDK版本問題 詳見:https://blog.csdn.net/leijie0322/article/details/51880733

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top