JBASECOREDUMP

JBASECOREDUMP is used as a diagnostic tool for applications. It allows a snapshot of the application to be dumped to an external file for later analysis.

COMMAND SYNTAX

    JBASECOREDUMP(expression1, expression2)

SYNTAX ELEMENTS

expression1 should evaluate to a string:

If assigned a value, expression1 will be used as the extension for the external text file created to hold execution snapshot.

    rc = JBASECOREDUMP('SERVICE', 0)

This will create the file with name structured as:

"JBASECOREDUMP.<<UUID>>.<<expression1>>", e.g.:

     JBASECOREDUMP.a57d07cc-6539-470f-9959-24ed7c715f4f.SERVICE.

If a null string is used:

    rc = JBASECOREDUMP('', 0)

This will create the file with name structured as:

"JBASECOREDUMP.<<UUID>>, e.g.:

     JBASECOREDUMP.a57d07cc-6539-470f-9959-24ed7c715f4f

expression2 should evaluate to a numeric integer:

     0: Add all varables to the external text file.
     1: Suppess any UNASSIGNED varables saved to the external file.

NOTES

jBC functionality will be affected in the following areas:

Calling from a jbc subroutine.

When the JBASECOREDUMP function is called from a jbc program it will stop execution. The call stack is saved to a file, and also saved to the logs. Each core dump now is assigned a unique ID.

Running a program in a jsh.

If called from a program while in a jSH, a message is now displayed along with the UUID for the core dump, you can use this to locate the stack trace in the logs.

     ∗∗ Error [ JBASECOREDUMP ] ∗∗ Program Aborted, Coredump UUID: <<UUID>>

Calling process started via EXECUTE/PERFORM from within a jbc program.

If JBASECOREDUMP is called from a process started via EXECUTE/PERFORM from a jbc program, use RETURNING/SETTING to capture the output associated with any error messages the executing program issues.

    EXECUTE "MYPROGRAM" CAPTURING junk SETTING rc
         * rc<1,1> holds the error code "JBASECOREDUMP".
         * rc<1,2> holds the UUID for the core dump.

Because all JBASECOREDUMP's are logged you can use this UUID to check the log files.

When called via jAgent, using a jbc subroutine.

A new exception type has been created to return the UUID to the client application. (JSubroutineCoreDumpException)

The following is a simple example of how to check for core dumps.

     try {
       _connection.call("CALLCOREDUMP_WITH_FILENAME", null);
     }
     catch (const JSubroutineCoreDumpException &e) {
       const std::string uuid = e.getMessage()->c_str();
       // handle exception
     }

Use this UUID to check on the server for what went wrong. The Java and C# clients have also been updated to handle this new exception type.

EXAMPLE

example.b:

    001 rc = JBASECOREDUMP('ERRORFILE', '')

Compile:

     jcompile example.b

run:

     ∗∗ Error [ JBASECOREDUMP ] ∗∗ Program Aborted,
     Coredump UUID: 4d5a252a-c009-4aec-9e1f-73d3251c6b81

      dir JBASECOREDUMP∗
     JBASECOREDUMP.4d5a252a-c009-4aec-9e1f-73d3251c6b81.ERRORFILE

     ct . JBASECOREDUMP.4d5a252a-c009-4aec-9e1f-73d3251c6b81.ERRORFILE
     JBASECOREDUMP.4d5a252a-c009-4aec-9e1f-73d3251c6b81.ERRORFILE
     001 jBASE Core dump created at Fri Feb 24 11:21:10 2012
     002 UUID: 4d5a252a-c009-4aec-9e1f-73d3251c6b81
     003 Program example , port 87 , process id 3488
     004
     005 CALL/GOSUB stack
     006
     007 Backtrace:
     008 #0: jmainfunction.b:1
     009 #1: example.b:1 -> Line 1 , Source jmainfunction.b
     010
     011 Backtrace log:
     012 Program jmainfunction.b, Line 1, Stack level 0
     013 Line 0 , Source jmainfunction.b , Level 0
     014 >>> Program example.b, Line 1, Stack level 1
     015 Line 1 , Source jmainfunction.b
     016
     017 All the defined VAR's in the program
     018
     019 SUBROUTINE main()
     020 00000000006BEE90 : rc : (V) String : 0 bytes at address 0000000055740A58 :

Locating entry in the logs using the UUID.

     find "4d5a252a-c009-4aec-9e1f-73d3251c6b81" %TAFC_HOME%\log\default

The following lines may appear in the log file:

     ---- C:\R12\LOG\DEFAULT\EXAMPLE.HML0001.JBCUSER.LOG.ERROR.20120224-112110.3488
     E0224 11:21:10.737900 5832 tafc_logger_c_api.cpp:33]
     Coredump file: JBASECOREDUMP.4d5a252a-c009-4aec-9e1f-73d3251c6b81.ERRORFILE
     E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33]
     UUID: 4d5a252a-c009-4aec-9e1f-73d3251c6b81

Type the following command to display the log file:

     CT %TAFC_HOME%\LOG\DEFAULT\EXAMPLE.HML0001.JBCUSER.LOG.ERROR.20120224-
        112110.3488

The below log file will appear "example.HML0001.JBCUSER.LOG.ERROR.20120224-112110.3488":

     001 Log file created at: 2012/02/24 11:21:10
     002 Running on machine: HML0001
     003 Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
     004 E0224 11:21:10.737900 5832 tafc_logger_c_api.cpp:33] Coredump file:
         JBASECOREDUMP.4d5a252a-c009-4aec-9e1f-73d3251c6b81.ERRORFILE
     005 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] jBASE Core dump created
         at Fri Feb 24 11:21:10 2012
     006 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] UUID:
         4d5a252a-c009-4aec-9e1f-73d3251c6b81
     007 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] Program example , port
         87, process id 3488
     008 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33]
     009 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] CALL/GOSUB stack
     010 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33]
     011 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] Backtrace:
     012 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] #0: jmainfunction.b:1219
     013 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] #1: example.b:1->Line 1,
         Source jmainfunction.b
     014 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33]
     015 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] Backtrace log:
     016 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] Program jmainfunction.b,
         Line 1, Stack level 0
     017 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] Line 0 ,
         Source jmainfunction.b , Level 0
     018 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] >>> Program example.b,
         Line 1, Stack level 1
     019 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] Line 1 ,
         Source jmainfunction.b
     020 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33]
     021 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] All the defined VAR's
         in the program
     022 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33]
     023 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] SUBROUTINE main()
     024 E0224 11:21:10.739899 5832 tafc_logger_c_api.cpp:33] 00000000006BEE90 :
         rc : (V) String : 0 bytes at address 0000000055740A58 :

Last update: Sat, 16 Jul 2022 15:34