(Display Error Stack Error Use Case Scenario)
/* This routine prints the error stack in two different ways, using the default
error printing routine and a custom error printing routine (below). The parameter error_stack
can be H5E_DEFAULT for current stack or the object handle for an error stack converted by
H5Eget_current_stack */
int Client_dump_error(hid_t error_stack)
{
/* This call uses the default HDF5 error printing routine to display the error stack */
H5Eprint(error_stack, stdout);
/* This call uses a custom error printing routine to display the error stack */
H5Ewalk(error_stack,H5E_WALK_UPWARD,Client_print_error,NULL);
}
/* This routine prints the information for an error on the error stack */
/* Note that it uses the following H5E_error_t struct, which is updated from
* the current H5E_error_t:
*
* typedef struct H5E_error_t {
* hid_t cls_id; /* Error class ID */
* hid_t maj_id; /* Major error ID */
* hid_t min_id; /* Minor error ID */
* const char *func_name; /* Function in which error occurred */
* const char *file_name; /* File in which error occurred */
* unsigned line; /* Line in file where error occurs */
* const char *desc; /* Optional supplied description */
* } H5E_error_t;
*
*/
herr_t Client_print_error(int n, H5E_error_t *err_desc, void *cb_data)
{
const char class_name[32];
const char maj_name[32];
const char min_name[32];
/* Get the error class's name */
H5Eget_class(err_desc->class,class_name,32);
/* Get the major error description */
H5Eget_mesg(err_desc->maj_num,maj_name,32);
/* Get the minor error description */
H5Eget_mesg(err_desc->min_num,min_num,32);
/* Print error information */
printf("Error Stack Position: %d\n",n);
printf("Error Class: %s\n",class_name);
printf("Major Error Description: %s\n",maj_name);
printf("Minor Error Description: %s\n",min_name);
printf("File Name: %s\n",err_desc->file_name);
printf("Function Name: %s\n",err_desc->func_name);
printf("Line #: %u\n",err_desc->line);
printf("Error Description: %s\n",err_desc->desc);
}
The output from the default error printing routine for a failure in the H5Dwrite routine is shown below(this relies on the previous two examples: Register Client Library and Push Error). For each different class, the first line tells the information about the library name, version number and thread ID.
HDF5-DIAG: Error detected in HDF5 library version: 1.5.62 thread 0. #002: H5D.c line 1342 in H5Dwrite(): not a dataset class(07): HDF5 Library major(12): invalid arguments to routine minor(23): incorrect type found A_CLIENT-DIAG: Error detected in A_CLIENT library version: 1.0 thread 0. #001: client_io.c line 123 in Client_do_write(): H5Dwrite failed class(07): Client Library major(43): Errors on I/O minor(97): Error in HDF5