CowNew開源團隊網站 http://www.cownew.com
論壇 http://www.cownew.com/newpeng/
轉載請注明此版權信息
今天做的事情比較雜,所以感想也比較雜:
1、java程序的遠程調試。
“JPDA是sun jdk自帶的遠程調試機制。它提供了一套標準的調試接口,可以從虛擬機一級允許外界用特定協議探測虛擬機內部的運作細節。只要你裝了jdk 1.2以上的sun jdk,就已經有了jpda支持。 只要是用標準JDK中java.exe運行的應用,就可以用jpda進行遠程調試。以web應用的開發為例,servlet和ejb的調試一直不是一件太容易的事情。雖然jbuilder、eclipse等有一些常見的應用服務器,如tomcat, weblogic 6.x,的調試插件,但是用法各不相同,而且很容易由于版本問題導致出現各種問題,而且對于有的服務器則沒有相應的IDE插件。
JPDA就不一樣。由于它是java平臺的標準功能之一,所以我們其實可以調試任何用jdk運行的程序。只需要做兩件事:
(1)、 在被調試的應用上,增加幾個java虛擬機啟動參數,讓它啟動后進入調試服務器模式;
(2) 在本機或網絡中另一臺機器上用某種jpda客戶端程序,attach到被調試的應用程序(可以通過socket或共享內存兩種方式)。jpda本身只是一個接口,調試工具的好用與否就要看其對jpda的應用如何。jdb是sun jdk自帶的命令行jpda調試客戶程序,你可以用命令行設置斷點,查看變量值,等等。但不是很直觀。而jbuilder、eclipse的jpda調試器就做到了將jpda圖形化,可以直觀的設置斷點,跟蹤程序,查看量值,等等。 ”---本段改編自“http://www.cjsdn.com/post/print?bid=7&id=1376”
以elipse+tomcat為例:
(1)打開Tomcat 5.0\bin下的catalina.bat,在“set JPDA= ”下加入如下兩行:
set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=8787
(2)啟動tomcat
(3)在eclipse的debug中新建一個“Remote Java Application”,工程選擇被調試的遠程程序的源碼工程,host填127.0.0.1,port為8787
(4)運行調試。
這樣我們就可以在eclipse中下斷點調試tomcat中運行的程序了。讓那些亂七八糟的插件哪涼快去哪呆著吧。
注意一定要保證eclipse工程中的源碼和tomcat中運行的程序一致。
2、調用對象的wait方法的時候有可能會拋出InterruptedException異常,以前我是把這個異常再次拋出,今天運行發現當這個異常拋出的時候,線程就死掉了。因此不能簡單的將此異常re-throw,必須處理它,比如JDBMonitor中的BlockedChannel的take方法就要如下改寫:
public synchronized Object take()
?{
??if (container.isEmpty())
??{
???try
???{
????wait();
???} catch (InterruptedException e)
???{
????return null;
???}
??}
??Object obj = container.pop();
??return obj;
?}
3、windows下運行linux的最好的工具
最近一直想驗證JDBMonitor在linux底下是否有bug,但是聽人說過,linux安裝不當很容易發生數據丟失,因此一直不敢裝。而用virtual PC,VMWare之類的軟件又太消耗內存,而且需要虛擬機安裝完成再安裝linux。今天無意中搜索到一個windows下的linux虛擬機:MetroPipe VPM 。
下載地址:
http://www.metropipe.net/ProductsPVPMDownload.shtml
解壓后直接運行其中的qemu-win.bat就能啟動Linux。不用安裝,啟動關閉都非常快,而且占用內存相對來說比較小。
唯一一個缺點就是默認就進入圖形模式,抽時間看看怎么配置讓它啟動以后進入字符模式。
詳細可以參考:http://www.highand.com/viewthread.php?tid=545
?