1.0 簡介
2.0 已知的問題
2.1 Web 開發環境
2.2 WebSphere Application Server 除錯
2.3 JavaScript 除錯器
2.4 SQL 儲存程序除錯器
2.5 測試和部署工具(伺服器工具)
2.6 Java 開發工具 (JDT) 除錯器
2.7 國家語言限制
2.8 SQL 儲存程序除錯器 (Linux)
2.9 SQLJ 除錯器
WebSphere Studio 中的除錯器提供了 Web 應用程式、伺服器端 JavaScript、Java、SQL 儲存程序以及編譯的語言除錯所需的工具。 這個 Readme 檔會說明和 WebSphere Studio 除錯器相關聯的已知問題與限制。
JSP 除錯:
- JSP 檔在 WebSphere Application Server 上測試時可以除錯。如果您是在 Tomcat 伺服器上進行測試,除錯器不會停在 JSP 岔斷點。
- 岔斷點可以設定在 JSP 檔中的下列標示內:
- 格式如下的 JSP Scriptlet:<% %>
- 格式如下的 JSP 表示式:<%= %>
- 格式如下的 JSP 宣告:<%! %>
- jsp:useBean、jsp:getProperty 和 jsp:setProperty 標示
- 自訂標示
- 岔斷點不能設定於下列標示組:
- HTML 程式碼
- JSP 指引
- 所有其他標準 JSP 標示(jsp:include、jsp:forward 等)
- 如果您要將舊版 WebSphere Studio 中的工作區移轉至這個版本,您必須刪除 JSP 岔斷點,再重建它們。
- EJB Home 方法的逐步除錯模式會失敗:如果您利用 WebSphere Application Server 除錯配接器來啟動除錯階段作業,逐步除錯模式會跳過 EJB Home 方法。 如果這些方法需要除錯,請使用岔斷點。
- 不支援從 Java 跳回 JavaScript:如果您要能夠從 Java 返回 JavaScript 程式碼,請利用岔斷點。
- 除錯 JSP:
- 逐步除錯不會處理不包含任何執行碼的 JSP。
- 如果您利用 WebSphere Application Server 除錯配接器來啟動除錯階段作業,您不能視察或顯示 JSP 變數和表示式。
- JSP 不支援執行至指定行號。
- JSP 岔斷點的設定可能比較慢。如果您有許多 JSP 岔斷點,請讓除錯器在起始設定時有額外的時間。
- JSP 宣告區段靜態變數的岔斷點無法運作,可能會造成其他岔斷點問題。
- 不支援 JSP 岔斷點的岔斷點內容,例如讀取計數、條件、選取的執行緒和 VM 暫停原則。
- 不可在除錯器編輯器中設定 Java 岔斷點:Java 岔斷點必須設在 Java 編輯器中,而不是除錯器編輯器中。
- 使用「變更程式檔除錯」視圖蹦現功能表項目:如果您變更利用堆疊框的變更程式檔蹦現功能表項目來顯示的程式檔,就不會在編輯器中開啟新檔案。 如果要解決這個問題,請按一下另一個堆疊框,再重新按一下原始堆疊框。 之後,應該會在編輯器中開啟新檔案。
- 除錯主控台:在除錯主控台中,開啟類型的超鏈結無法運作。
- 在快速交換之後的堆疊框標籤: 如果在快速取代程式碼之後,部分堆疊框會有如下標籤:
<unknown receiving type>(<unknown declaring type>).<unknown method name>(<unknown arguments>) line: not available <unknown line number>您可以切換至不同的視景,再返回「除錯」視景,以取得正確的標籤。
- 在建構子完成之前,無法檢查 JavaScript 物件:您可以逐步執行建構子,但在建構子完成之前(您已離開建構子),您無法檢查所建構的物件。
- 在頂端堆疊框之下的逐行作業與堆疊框:JavaScript 不支援跳過和跳出最上層堆疊框以外的堆疊框。
- JSP include:不支援在 JSP include 中進行 JavaScript 的除錯。
- 跳出遞迴函數:進行遞迴 JavaScript 函數除錯的使用者會發現,當他們跳出某個遞迴函數時,會回到最上層的執行層次。
- 不可展開含有 writer 或 inputStream 變數的物件:當檢查 JavaScript 物件時,會警告使用者不要展開含有 writer 或 inputStream 變數的物件。這會導致除錯器沒有回應。
- 測試環境:當使用 WebSphere 第 5 版測試環境時,JavaScript 除錯無法運作。這個問題在 APAR #PQ73036 之下獲得修正。
- 在「資料定義」視圖中匯入或刪除資料庫可能會使所設定的岔斷點遺失: 如果您在「資料定義」視圖中將資料庫匯入資料夾之前進行 SQL 儲存程序的除錯,之後再匯入資料庫,您建立的任何行岔斷點都會遺失。 匯入資料庫之後,除錯器會利用這個資料夾來檢視程式碼。 如果您刪除匯入的資料庫資訊,您下次試圖進行 SQL 儲存程序的除錯時,也會失去岔斷點資訊。 這不會還原最初匯入資料庫時失去的岔斷點。
建議您在進行儲存程序的除錯之前先匯入資料庫,以避免這個問題。
- 不支援進行 Java 儲存程序的除錯:編輯器可讓您將岔斷點加入 Java 儲存程序的程式碼中。可是,系統會忽略這些岔斷點, 原因是系統尚未支援 Java 儲存程序的除錯功能。
- 定界儲存程序名稱:SQL 儲存程序除錯器提供有限支援含定界綱目或程序名稱的儲存程序。 這些程序必須從「啟動配置」對話框啟動,不能從「資料定義」視圖的快速功能表啟動。
- 支援同時開啟多個作用中的 SQL 儲存程序除錯器階段作業:在本產品的 5.0 版中,您不能同時開啟多個作用中的 SQL 儲存程序除錯器階段作業。 在本產品的 5.0.1 版或更新的版本中,已不再有這項限制。
- 含 FOR BIT DATA 引數的儲存程序:引數含有 FOR BIT DATA 屬性的儲存程序無法利用 WebSphere Studio SQL 儲存程序除錯器來除錯。
- 現行產品可能無法辨識在早期供應產品中建立的啟動配置:如果您安裝了本產品的早期供應版本,且利用它建立了儲存程序除錯器啟動配置, 當在本產品的現行版本中使用這個配置時,可能無法辨認這些啟動配置設定。 當在產品的現行版本中開啟早期供應版本所儲存的啟動配置設定時,它們可能會回復預設值。
當您決定以除錯模式執行伺服器時,請考量下列事項:
- 伺服器啟動與執行的速度可能會比在非除錯模式下執行來得慢。
- WebSphere Application Server 編譯 JSP 頁面的時間會明顯變長。
請參閱 Java 開發工具 (JDT) 版本注意事項和工作台 (IDE) 版本注意事項,以取得 Java 開發工具已知的問題和限制的相關資訊。 本產品所安裝的主要產品 Readme 會鏈結這些版本注意事項。
- 雙向 (BiDi) 限制:當您對以原生字碼頁以外的字碼頁編碼的 JSP 進行除錯時,您不能使用除錯器編輯器。
- 編譯語言除錯器:
- 在單位元組 (SBCS) 系統中,編譯語言除錯器不支援含有 0x7F 以上的字元的程式名稱或傳遞含有這類字元的程式參數。
- 不支援在被除錯端名稱和被除錯端引數中使用 NL 字元。
當您進行本端資料庫的 SQL 儲存程序除錯時,可能會出現錯誤碼 SQL1224N:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N 無法啟動資料庫代理程式來處理要求,或資料庫代理程式已因為資料庫系統關閉或強制指令而終止。SQLSTATE=55032
這是因為 Linux Kernel 的問題(Linux Kernel Bugzilla 錯誤 #351)所造成的。 下列指示是一個暫行解決方法,它利用 DB2 的 TCPIP 連線方法(作為迴路)來取代呼叫層次介面 (CLI)。 這個程序可讓除錯器使用與先前相同的資料庫別名:
- 如果沒有設定遠端 DB2 用戶端的埠,請在 /etc/services 中建立 TCP/IP 埠(如 db2cdb2inst1 50000/tcp # DB2 connection service port)。 可以使用遠端 DB2 用戶端現有的埠。
您必須以 DB2 實例擁有者的身分登入,才能執行以下的第 2-7 步驟。
- 配置資料庫管理程式來啟動 TCP/IP 通訊協定的連線管理程式。 如果您不確定有沒有完成這個動作,請發出下列指令:
db2set db2comm如果輸出沒有包含 tcpip 關鍵字,您必須輸入下列指令來更新 db2comm 登錄變數,使它包括 tcpip:
db2set db2comm=<existing protocol names>,tcpipdb2comm 登錄變數決定在啟動資料庫管理程式時,要啟用哪個通訊協定的連線管理程式。 您可以將這個變數設給多個通訊協定,用逗點來分開各個關鍵字,比方說,db2set db2comm=tcpip,appc。
您必須重新發出 db2start 指令,才能啟動 db2comm 登錄參數指定的通訊協定的連線管理程式。 由於以下第 7 步驟會重新啟動 DB2,因此,這時不需執行這個動作。
.- 利用 /etc/services 中所定義的連線服務名稱(第 1 步驟)來更新 SVCENAME 資料庫管理程式配置參數。
如果要檢查 SVCENAME 的現行設定,請輸入下列指令:
db2 get dbm cfg | grep -i svcename如果您需要更新 SVCENAME 的設定,請輸入下列指令:
db2 update dbm cfg using svcename <connection service name>其中 <connection service name> 會區分大小寫,必須符合 /etc/services 中的服務埠名稱(如 db2 update dbm cfg using svcename db2cdb2inst1)。
資料庫管理程式配置的更新必須等到下次發出 db2start 指令時才會生效。 以下第 7 步驟會執行這個動作。
- 輸入下列指令來建立迴路節點的型錄:
db2 catalog tcpip node <nodename> remote 127.0.0.1 server <connection service name>其中 <nodename> 是要建立型錄之節點的本端別名。 這是工作站中的任意名稱,用來識別節點(如 db2 catalog tcpip node mynode remote 127.0.0.1 server db2cdb2inst1)。
如果要確認 catalog 指令能正常運作,請發出下列指令:
db2 list node directory以下是這個指令的範例輸出(為方便閱讀,已移除空行):
節點目錄
目錄中的項目數 = 1
節點 1 項目:
節點名稱 = MYNODE
備註 =
通訊協定 = TCPIP
主機名稱 = 127.0.0.1
服務程式名稱 = db2cdb2inst1- 依下列方式來建立資料庫型錄。 如果您要追蹤每個指令的效果,請參閱下面所提供的指令來產生範例輸出:
- db2 catalog db <database name> as <database alias>
- db2 uncatalog db <database name>
- db2 catalog db <database alias as <database name> at node <nodename>
比方說,
db2 catalog db WAS as WASLOOP
db2 uncatalog db WAS
db2 catalog db WASLOOP as WAS at node MYNODE附註:
- 資料庫別名可以是您想要的任何名稱,但不能與資料庫同名。
- 如果沒有正確建立資料庫型錄,會出現錯誤碼 SQL1334N。
- 要進行儲存程序除錯的每個資料庫都必須重複第 5a-5c 步驟。
第 5a-5c 步驟的範例輸出
在第 5a 步驟之前,已建立了名稱為 WAS 的本端資料庫。 db2 list db directory 指令的輸出如下:
系統資料庫目錄
目錄中的項目數 = 1
資料庫 1 項目:
資料庫別名 = WAS
資料庫名稱 = WAS
本端資料庫目錄 = /home/ctsui
資料庫版本層次 = 9.00
備註 =
目錄項目類型 = Indirect
型錄節點號碼 = 0在第 5a 步驟之後,db2 list db directory 指令的輸出如下:
系統資料庫目錄
目錄中的項目數 = 2
資料庫 1 項目:
資料庫別名 = WAS
資料庫名稱 = WAS
本端資料庫目錄 = /home/ctsui
資料庫版本層次 = 9.00
備註 =
目錄項目類型 = Indirect
型錄節點號碼 = 0
資料庫 2 項目:
資料庫別名 = WASLOOP
資料庫名稱 = WAS
本端資料庫目錄 = /home/ctsui
資料庫版本層次 = 9.00
備註 =
目錄項目類型 = Indirect
型錄節點號碼 = 0在第 5b 步驟之後,db2 list db directory 指令的輸出如下:
系統資料庫目錄
目錄中的項目數 = 1
資料庫 1 項目:
資料庫別名 = WASLOOP
資料庫名稱 = WAS
本端資料庫目錄 = /home/ctsui
資料庫版本層次 = 9.00
備註 =
目錄項目類型 = Indirect
型錄節點號碼 = 0在第 5c 步驟之後,db2 list db directory 指令的輸出如下:
系統資料庫目錄
目錄中的項目數 = 2
資料庫 1 項目:
資料庫別名 = WAS
資料庫名稱 = WASLOOP
節點名稱 = MYNODE
資料庫版本層次 = 9.00
備註 =
目錄項目類型 = Remote
型錄節點號碼 = -1
資料庫 2 項目:
資料庫別名 = WASLOOP
資料庫名稱 = WAS
本端資料庫目錄 = /home/ctsui
資料庫版本層次 = 9.00
備註 =
目錄項目類型 = Indirect
型錄節點號碼 = 0
如果要確認 catalog db 指令能正常運作,請發出下兩個指令(請參閱下面的範例輸出):
db2 connect to wasloop
db2 connect to was其中 db2 connect to wasloop 應該會印出連線資訊,db2 connect to was 應該會提供 SQL1403N。
db2 connect to wasloop 的範例輸出如下:
資料庫連線資訊
系統資料庫目錄資料庫伺服器 = DB2/6000 6.1.0
SQL 授權 ID = CTSUI
本端資料庫別名 = WASLOOPdb2 connect to was 的範例輸出如下:
SQL1403N 提供的使用者名稱和/或密碼不正確。SQLSTATE=08004- 將鑑別機制更新為用戶端鑑別。輸入下列指令:
db2 update dbm cfg using authentication client
如果要確認指令能正常運作,請利用下列指令來顯示新設定:
db2 get dbm cfg
範例輸出:
....
資料庫管理程式鑑別 (AUTHENTICATION) = CLIENT
....- 重新啟動 DB2 來重新整理目錄快取。比方說,
db2stop
db2start- 不需要更新 WAS 的 admin.config 檔。 不需要變更 WebSphere 應用程式的現有資料來源配置。
- 如果您要除去資料庫,請執行下列動作:
- db2 attach to <nodename> user <userid> using <password>
- db2 drop db <database name>
比方說,db2 attach to MYNODE user myid using mypasswd
db2 drop db WAS
當執行熱交換時,如果正在進行 J9 JVM 除錯,且呼叫堆疊中有任何 SQLJ 方法,會出現堆疊中已作廢的方法對話框。 如果是 SQLJ 類別在進行熱交換,類別會重新載入 JVM 中,但在下次呼叫類別中的方法之前,不會執行新程式碼。
如果您要交換 SQLJ 類別,在現行除錯階段作業期間,這個類別的 SQLJ 岔斷點可能無法運作。
(C) Copyright IBM Corporation 2000, 2003. All Rights Reserved.