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.
- The JBASECOREDUMP function will stop the execution of a jbc program or subroutine.
- The applications snapshot is also saved in the logs.
- The filename for the external file will always be unique.
- If called via jAgent an exception will be thrown.
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.
- Running a program in a jsh.
- External text filenames are now unique for coredump files.
- Calling process started via EXECUTE/PERFORM from within a jbc program.
- When called via jAgent, using a jbc subroutine.
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 :