One thing to keep in mind, and the JNI code does, is that you clear the error stack when you use certain H5E APIs.
Allen On Tuesday, November 29, 2016 6:07:22 PM CST Elvis Stansvik wrote: > Den 29 nov. 2016 5:41 em skrev "Elvis Stansvik" < > [email protected]>: > > > > Den 29 nov. 2016 3:32 em skrev "Allen Byrne" <[email protected]>: > > > > > > If you download the latest source, with the Java API, or the hdf-java > 3.2.1 source - you can inspect the JNI code for exceptions in the native > hdf5 exceptionImp.c file. > > > Another source of using the exception API for custom error reporting is > the tools library and h5dump. > > > > Ah, thanks for the pointers Allen. I actually think I came across the JNI > code during my googlings, but didn't look closer at it before I got busy > with other things. I'll take a look when I'm back at it. > > I looked at it briefly again, and the JNI code looks like it's doing > exactly what I want (a custom walker + H5E_walk2 to just get the top error, > and then H5E_get_msg to get the corresponding message). Many thanks. > > I think when I was trying to figure it out on my own, I didn't realize it's > the minor error code I should feed to H5E_get_msg. > > Elvis > > > Elvis > > > > > > > > Allen > > > > > > On Tuesday, November 29, 2016 9:20:03 AM CST Elvis Stansvik wrote: > > > > Hi Rob, > > > > > > > > 2016-11-28 21:43 GMT+01:00 Rob Latham <[email protected]>: > > > > > > > > > > > > > > > > > > > On 11/08/2016 01:18 PM, Elvis Stansvik wrote: > > > > > > > > > >> Hi all, > > > > >> > > > > >> Is it possible to get some more informative error from H5Fopen than > > > > >> "it failed"? E.g. if it was a permission problem, nonexistent file, > > > > >> corrupted file, ...? Or must I try to deduce the reason for the > > > > >> failure myself? (always risky to do such checks pre- or > post-mortem so > > > > >> to speak..). > > > > >> > > > > > > > > > > I think you are going to have to share your output with the list. > Whenever > > > > > *I* run hdf5 and get an error I get screenfuls of information. > > > > > > > > > > For example, here's a simple hdf5 program trying to open a file for > which > > > > > I have removed all read and write permissions: > > > > > > > > > > > > > Yes, and I'm sorry. I should have replied to myself quite soon after > I sent > > > > my message, but somehow forgot about it. > > > > > > > > When I first wrote my message, I was > > > > > > > > 1. working through the C++ API, and > > > > 2. building my program in release mode. > > > > > > > > Working through the C++ API meant I was using > > > > H5::Exception::getDetailMsg(), hoping to get some detailed message, > but it > > > > was giving me something like "H5Fopen failed" (which is why I > mentioned the > > > > H5Fopen C function in my post). Building my program in release mode > also > > > > meant I did not get the detailed error stack printout that the C > layer does > > > > by default in debug mode (like you showed below). That's why I was a > little > > > > puzzled. > > > > > > > > Since I wrote my message, I have > > > > > > > > 1. switched to working with the C API (through a simple HDF5File C++ > > > > class of my own), > > > > 2. learned all about the gory details of the H5E API [1] and error > > > > handling in chapter 9 of the User Guide. > > > > > > > > So I'm all good now :) Though I must say the error handling API is > quite > > > > complicated (I still haven't written my custom error > walking/formatting > > > > functions, so only relying on the default printouts I get in debug > mode). > > > > > > > > One thing that I would wish for is > > > > > > > > 1. an API similar to H5Eprint that would take an output char* > parameter > > > > instead of a FILE*, > > > > 2. a simpler API to just get the human readable message (if any) > for the > > > > most likely "root cause" for the latest error. > > > > > > > > 1 because if you're interested in getting the error trace into a > string > > > > (for e.g. showing it in the UI), then setting up an in-memory FILE* > is not > > > > something that can be easily done in a portable way (I know about > > > > fmemopen/open_memstream, but they are POSIX). I know this can be done > by > > > > setting up your own error stack walking function, but it's quite > awkward to > > > > have to do that, especially if you're happy with the formatting that > HDF5 > > > > does by default, and you just want the result as a string instead. > > > > > > > > 2 because like others have mentioned, sometimes you're not interested > in > > > > the full trace, but only the likely root cause (which is probably > somewhere > > > > at the bottom of the stack). > > > > > > > > Anyway, thanks for chiming in, and sorry again for not following up > on my > > > > own post earlier. > > > > > > > > Elvis > > > > > > > > > > > > > > > > > > HDF5-DIAG: Error detected in HDF5 (1.8.16) thread 0: > > > > > #000: ../../../hdf5-1.8.16/src/H5F.c line 604 in H5Fopen(): > unable to > > > > > open file > > > > > major: File accessibilty > > > > > minor: Unable to open file > > > > > #001: ../../../hdf5-1.8.16/src/H5Fint.c line 992 in H5F_open(): > unable > > > > > to open file: time = Mon Nov 28 14:41:40 2016 > > > > > , name = 'try.h5', tent_flags = 1 > > > > > major: File accessibilty > > > > > minor: Unable to open file > > > > > #002: ../../../hdf5-1.8.16/src/H5FD.c line 993 in H5FD_open(): > open > > > > > failed > > > > > major: Virtual File Layer > > > > > minor: Unable to initialize object > > > > > #003: ../../../hdf5-1.8.16/src/H5FDsec2.c line 339 in > H5FD_sec2_open(): > > > > > unable to open file: name = 'try.h5', errno = 13, error message = > > > > > 'Permission denied', flags = 1, o_flags = 2 > > > > > major: File accessibilty > > > > > minor: Unable to open file > > > > > > > > > > > > > > >> Thanks in advance, > > > > >> Elvis > > > > >> > > > > >> _______________________________________________ > > > > >> Hdf-forum is for HDF software users discussion. > > > > >> [email protected] > > > > >> > http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org > > > > >> Twitter: https://twitter.com/hdf5 > > > > >> > > > > >> > > > > > _______________________________________________ > > > > > Hdf-forum is for HDF software users discussion. > > > > > [email protected] > > > > > > http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org > > > > > Twitter: https://twitter.com/hdf5 > > > > > > > > > > > > > > > > _______________________________________________ Hdf-forum is for HDF software users discussion. [email protected] http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org Twitter: https://twitter.com/hdf5
