Debuggers - release notes

1.0 Introduction
2.0 Known problems
   2.1 Web Development Environment
   2.2 WebSphere Application Server debugging
   2.3 JavaScript debugger
   2.4 SQL Stored Procedure debugger
   2.5 Test and deployment tools (server tools)
   2.6 Java Development Tools (JDT) debugger
   2.7 National language limitations
   2.8 SQL Stored Procedure debugger (Linux)
   2.9 SQLJ debugger

1.0 Introduction

The debuggers in WebSphere Studio provide the tooling necessary to debug Web applications, server-side JavaScript, Java, SQLJ, SQL Stored Procedures, and compiled languages. This readme file describes the known problems and limitations that are associated with the WebSphere Studio debuggers.

2.0 Known problems

2.1 Web Development Environment

JSP Debugging:

2.2 WebSphere Application Server debugging

2.3 JavaScript debugger

2.4 SQL Stored Procedure debugger

2.5 Test and deployment tools (server tools)

Consider the following when deciding to run a server in debug mode:

2.6 Java Development Tools (JDT) debugger

Information about the known problems and limitations with the Java development tools is available in the Java development tools (JDT) release notes and in the Workbench (IDE) release notes. These are linked to from main product readme that installed with this product.

2.7 National language limitations

2.8 SQL Stored Procedure debugger (Linux)

When you are debugging an SQL Stored Procedure on a local database, it is possible to receive error number SQL1224N:

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N A database agent could not be started to service a request, or was terminated as a result of a database system shutdown or a force command. SQLSTATE=55032

This is due to a problem in the Linux kernel (Linux kernel Bugzilla bug #351). The following instructions are a work-around that uses DB2's TCPIP connection method (as a loopback) instead of Call Level Interface (CLI). This procedure will allow the debugger to use the same database alias as before:

  1. If a port for remote DB2 clients has not been set up, create a TCP/IP port in /etc/services, (for example, db2cdb2inst1 50000/tcp # DB2 connection service port). An existing port for remote DB2 clients may be used.

    Steps 2 to 7 below require you log in as the DB2 instance owner.

  2. Configure the database manager to start connection manager for the TCP/IP communication protocol. If you are not sure if this has already been done, issue the following command:
    db2set db2comm

    If the output does not contain the keyword tcpip, you need to enter the following command to update the db2comm registry variable to include tcpip:

    db2set db2comm=<existing protocol names>,tcpip

    The db2comm registry variable determines which protocol's connection manager will be enabled when the database manager is started. You can set this variable for multiple communication protocols by separating the keywords with commas, for example, db2set db2comm=tcpip,appc.

    You need to re-issue the db2start command in order to start the connection managers for the protocols specified by the db2comm registry parameter. Since we will restart DB2 in step 7 below, there is no need to now.

    .
  3. Update the SVCENAME database manager configuration parameter with the connection service name defined in /etc/services (step 1).

    To check the current setting of SVCENAME, enter the following command:

    db2 get dbm cfg | grep -i svcename

    If you need to update the setting of SVCENAME, enter the following command:

    db2 update dbm cfg using svcename <connection service name>

    where <connection service name> is case-sensitive and must match the name of the service port that you placed in /etc/services (for example, db2 update dbm cfg using svcename db2cdb2inst1).

    The update of the database manager configuration will not be effective until the next db2start command is issued. We will do this in step 7 below.

  4. Catalog the loopback node by entering the following command:
    db2 catalog tcpip node <nodename> remote 127.0.0.1 server <connection service name>

    where <nodename> is a local alias for the node to be cataloged. This is an arbitrary name on the workstation, used to identify the node (for example, db2 catalog tcpip node mynode remote 127.0.0.1 server db2cdb2inst1).

    To verify that the catalog command worked properly, issue the following command:

    db2 list node directory

    A sample output of this command is (blank lines have been removed for legibility):

    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
  5. Catalog the database as follows. See the commands given below to generate sample output if you wish to track the effects of each command:
    1. db2 catalog db <database name> as <database alias>
    2. db2 uncatalog db <database name>
    3. db2 catalog db <database alias as <database name> at node <nodename>
    for example,
    db2 catalog db WAS as WASLOOP
    db2 uncatalog db WAS
    db2 catalog db WASLOOP as WAS at node MYNODE

    Notes:

    • The database alias can be any name you want but it cannot be the same as the database name.
    • You will receive error number SQL1334N if you did not catalog the database correctly.
    • You need to repeat steps 5a to 5c for every database on which you wish to debug a stored procedure.

    Sample output for steps 5a to 5c

    Before step 5a, a local database named WAS has already been created. The command db2 list db directory has the following output:

    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

    After step 5a, db2 list db directory has the following output:

    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

    After step 5b, db2 list db directory has the following output:

    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

    After step 5c, db2 list db directory has the following output:

    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

    To verify that the catalog db command worked properly, issue the following two commands (and see the sample output below):

    db2 connect to wasloop
    db2 connect to was

    where db2 connect to wasloop should print the connection information and db2 connect to was should give you SQL1403N.

    Sample output of db2 connect to wasloop:

    Database Connection Information
    System Database Directory

    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WASLOOP

    Sample output of db2 connect to was:

    SQL1403N The username and/or password supplied is incorrect. SQLSTATE=08004
  6. Update the authentication mechanism to Client authentication. Enter the command:
    db2 update dbm cfg using authentication client

    To verify that the command worked properly, display the new setting with the following command:

    db2 get dbm cfg

    Sample output:

    ....
    Database manager authentication         (AUTHENTICATION) = CLIENT
    ....
  7. Restart DB2 to refresh the directory cache. For example,
    db2stop
    db2start
  8. For WAS, there is no need to update the admin.config file. For a Websphere application, there is no need to change the existing datasource configuration.
  9. If you want to drop the database, do the following:
    1. db2 attach to <nodename> user <userid> using <password>
    2. db2 drop db <database name>
      for example, db2 attach to MYNODE user myid using mypasswd
      db2 drop db WAS

2.9 SQLJ debugger

When performing hot swap while debugging with the J9 JVM, if there are any SQLJ methods on the call stack, you will get an Obsolete methods on the stack dialog. If the hot swap was of an SQLJ class, the class will be reloaded in the JVM, but you will not see the new code being executed until the next time a method in the class is called.

If you hot swap an SQLJ class, SQLJ breakpoints may not work for this class during the current debug session.

Return to the main readme file