Is it OK to just supply this file to Support? Usually, if you see a program quitting with an abnormal fault, it is possible to find the cause behind the fault. If you have a Debugger installed on the machine where this fault is seen, this can help Support isolate the issue easily.
Harvest Software Change Manager v13.x and up
Core dumps usually contain valuable information. This article explains some ways to extract this valuable information on the machine where the core was produced.
STEP A: How to capture the core file
Not all memory access errors (ex: segmentation fault) produce a core dump file. If you are receiving a memory access error, but a core file is not being created, there are a few system settings you can check to be sure a core file is being created and that it can be saved.
$ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) 4 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 7168 virtual memory (kbytes, -v) unlimited ulimit -H -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) 4 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) unlimited cpu time (seconds, -t) unlimited max user processes (-u) 7168 virtual memory (kbytes, -v) unlimitedThe above two UNIX commands should give you decent information about the user limitations ( ulimit -a ) and the system limitations ( ulimit -H -a ). In the above example, it's pretty clear that the user limit for core file size is 0. So, even if a memory access error resulted in a core dump, you would not get a generated core file. You can change this by using ulimit -c XXXXXX where XXXXXX is the maximum value. This is almost generic to all UNIX platforms (refer to the main pages of ulimit for more details).
global core file pattern: init core file pattern: core global core dumps: disabled per-process core dumps: enabled global setid core dumps: disabled per-process setid core dumps: disabled global core dump logging: disabled
STEP B: I got hold of the core, now what?
Find the process name which created the core file. There are many ways to do this, but a simple one is to use the file command. Example:
file core.filename core:ELF-64 core file - PA-RISC 2.0 from 'bkrd' - received SIGABRT
STEP C: Identify the paths involved:
Now that you know the process name, find the full path of the executable in question. For Harvest, the actual libraries and executables are in the $HARVESTHOME/lib directory, while the $HARVESTHOME/bin based files are actually wrapper scripts. These wrapper scripts create a run-time environment with specific references to other libraries and invoke the actual harvest executables from the $HARVESTHOME/bin directory.
So, we would have to note down the path to the actual executables. In our bkrd case above, it would be $HARVESTHOME/lib/bkrd (assuming $HARVESTHOME is a valid variable referring to the location where Harvest was installed). Let's call it the $EXEC_PATHNAME for the purposes of this document.
Next, you need to note down the full path to the core file produced. Example: /home/harvest/core.filename. Let's call it the $CORE_PATHNAME for the purposes of this document.
STEP D: Use a debugger to extract information from the core file:
Debuggers like dbx/adb/gdb can be used to extract information from core files. Usually, they work with a syntax such as this:
gdb $EXEC_PATHNAME $CORE_PATHNAME adb $EXEC_PATHNAME $CORE_PATHNAME dbx $EXEC_PATHNAME $CORE_PATHNAME
However, before the above command is invoked, you'd have to setup the necessary environment to access the proper libraries. An easier way is by doing something like this:
gdb $EXEC_PATHNAME $CORE_PATHNAME # where $EXEC_PATHNAME is full path to the executable that core dumped # where $CORE_PATHNAME is full path to the core file # instead of gdb, it could be full path to dbx or gdb or adb, depending # on which debugger you are using
Now you should be at your favorite debugger prompt and will be able to perform some post-mortem operations like back tracing, displaying the stack information when the core dump happened, etc., Such information can help CA Engineering to isolate the reason behind the fault in the program.
This information can be supplied to CA Tech Support for further analysis, along with additional information like the platform configuration, Harvest configuration/version/patch level, etc.,.
Other Relevant Information:
Note (1):
Refer to the specific vendor's documentation for additional information about each UNIX/LINUX platform/debugger that's being used.
Note (2):
Important commands at various debugger prompts:
Other options can be used as well. The above are just given as examples.
Note (3): Contact Support in case of any questions. Above operations do require some knowledge of computer programming / systems administration.