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、SQLJ、SQL 存储过程和编译语言所需的工具。本自述文件描述与 WebSphere Studio 调试器相关联的已知问题与限制。
JSP 调试:
- 当在 WebSphere Application Server 上进行测试时,可以调试 JSP 文件。如果是在 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 对象:可以单步执行构造函数的执行,但是在完成构造函数(您已退出构造函数)之前,不能检查被构造的对象。
- 单步执行顶部堆栈帧下面的堆栈帧:JavaScript 不支持单步跳过和单步返回除了顶部堆栈帧之外的堆栈帧。
- JSP include:不支持在 JSP include 中调试 JavaScript。
- 单步跳出递归函数:调试递归 JavaScript 函数的用户将发现,当他们单步跳出递归函数时,他们就返回到了顶部执行层。
- 不要展开包含 writer 或 inputStream 变量的对象:当检查 JavaScript 对象时,用户要注意不要展开包含 writer 或 inputStream 变量的对象。这将导致调试器变成无响应的。
- 测试环境:在使用“WebSphere V5 测试环境”时,JavaScript 调试将不起作用。此问题在 APAR #PQ73036 下得到修正。
- 在“数据定义”视图中导入或删除数据库可能会导致丢失断点:如果您在“数据定义”视图中在将数据库导入文件夹之前调试 SQL 存储过程,然后导入数据库,则将丢失已创建的任何行断点。一旦导入了数据库,调试器就将使用该文件夹来查看源代码。如果删除已导入的数据库信息,则当您下一次尝试调试 SQL 存储过程时也将丢失断点信息。这不会恢复第一次导入数据库时丢失的断点。
建议您在调试存储过程之前导入数据库,以避免发生此问题。
- 不支持调试 Java 存储过程:编辑器允许您向 Java 存储过程的源代码中添加断点。然而,将忽略这些断点,原因是尚不支持调试 Java 存储过程。
- 定界的存储过程名称:SQL 存储过程调试器对存储过程提供了有限的定界模式或过程名称支持。这样的过程必须从“启动配置”对话框启动而不是从“数据定义”视图的上下文件菜单启动。
- 支持同一时间有多个活动 SQL 存储过程调试器会话打开:在此产品的版本 5.0 中,不能有多个活动 SQL 存储过程调试器会话同时打开。这一限制在此产品的版本 5.0.1 或更高版本中不再适用。
- 具有 FOR BIT DATA 自变量的存储过程:不能使用 WebSphere Studio SQL 存储过程调试器调试具有带有 FOR BIT DATA 属性的自变量的存储过程。
- 在当前产品中不能识别在 Early Availability 产品中创建的启动配置:如果您安装了此产品的 Early Availability 版本,并用它创建了“存储过程调试器”启动配置,则当将启动配置设置与此产品的当前版本配合使用时,不能识别这些启动配置设置。当在该产品的当前版本中打开时,保存在 Early Availability 版本中的启动配置设置可能会回复到缺省值。
当决定在调试方式下运行服务器时,请考虑下列各项:
- 与在非调试方式下运行相比,服务器的启动和运行速度都会比较慢。
- WebSphere Application Server 编译 JSP 页所需的时间显著增加。
Java 开发工具(JDT)发行说明和“工作台”(IDE)发行说明中提供了有关 Java 开发工具的已知问题与限制的信息。可从随此产品安装的主产品自述文件链接至这些发行说明。
- 双向(BiDi)限制:在调试已经使用不是本机代码页的代码页来编码的 JSP 时,您将不能使用“调试器”编辑器。
- 编译语言调试器:
- 在单字节(SBCS)系统上,“编译语言调试器”不支持程序名或传递包含 0x7F 以上的字符的程序参数。
- 在调试对象名和调试对象自变量中使用 NL 字符不受支持。
当在本地数据库上调试“SQL 存储过程”时,可能接收到错误号 SQL1224N:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N 未能启动数据库代理进程以响应请求,或者数据库代理进程因为数据库系统关闭或强制命令而终止。SQLSTATE=55032
这是因为 Linux 内核(Linux 内核 Bugzilla 错误 #351)中的问题造成的。下列指示信息是一个变通方法,即,使用 DB2 的 TCPIP 连接方法(作为回送)而不是“调用级接口”(CLI)。此过程将允许调试器象以前一样使用同一数据库别名:
- 如果未对远程 DB2 客户机设置端口,则在 /etc/services 中创建 TCP/IP 端口(例如,db2cdb2inst1 50000/tcp # DB2 connection service port)。可使用远程 DB2 客户机的现有端口。
下面的步骤 2 至 7 要求您作为 DB2 实例所有者登录。
- 配置数据库管理器以对 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)。
要验证该编目命令正常工作,发出以下命令:
db2 list node directory此命令的样本输出为(为易于阅读,已除去空白行):
Node Directory
Number of entries in the directory = 1
Node 1 entry:
Node name = MYNODE
Comment =
Protocol = TCPIP
Hostname = 127.0.0.1
Service name = 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 命令具有以下输出:
System Database Directory
Number of entries in the directory = 1
Database 1 entry:
Database alias = WAS
Database name = WAS
Local database directory = /home/ctsui
Database release level = 9.00
Comment =
Directory entry type = Indirect
Catalog node number = 0在步骤 5a 之后,db2 list db directory 具有以下输出:
System Database Directory
Number of entries in the directory = 2
Database 1 entry:
Database alias = WAS
Database name = WAS
Local database directory = /home/ctsui
Database release level = 9.00
Comment =
Directory entry type = Indirect
Catalog node number = 0
Database 2 entry:
Database alias = WASLOOP
Database name = WAS
Local database directory = /home/ctsui
Database release level = 9.00
Comment =
Directory entry type = Indirect
Catalog node number = 0在步骤 5b 之后,db2 list db directory 具有以下输出:
System Database Directory
Number of entries in the directory = 1
Database 1 entry:
Database alias = WASLOOP
Database name = WAS
Local database directory = /home/ctsui
Database release level = 9.00
Comment =
Directory entry type = Indirect
Catalog node number = 0在步骤 5c 之后,db2 list db directory 具有以下输出:
System Database Directory
Number of entries in the directory = 2
Database 1 entry:
Database alias = WAS
Database name = WASLOOP
Node name = MYNODE
Database release level = 9.00
Comment =
Directory entry type = Remote
Catalog node number = -1
Database 2 entry:
Database alias = WASLOOP
Database name = WAS
Local database directory = /home/ctsui
Database release level = 9.00
Comment =
Directory entry type = Indirect
Catalog node number = 0
要验证 catalog db 命令正常工作,发出下列两个命令(并查看下面的样本输出):
db2 connect to wasloop
db2 connect to was其中 db2 connect to wasloop 应打印连接信息,而 db2 connect to was 应给出 SQL1403N。
db2 connect to wasloop 的样本输出:
Database Connection Information
System Database DirectoryDatabase server = DB2/6000 6.1.0
SQL authorization ID = CTSUI
Local database alias = WASLOOPdb2 connect to was 的样本输出:
SQL1403N 提供的用户名和/或密码不正确。SQLSTATE=08004- 将认证机制更新为客户机认证。输入以下命令:
db2 update dbm cfg using authentication client
要验证命令正常工作,使用以下命令显示新设置:
db2 get dbm cfg
样本输出:
....
Database manager authentication (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.