diff options
author | Robb Matzke <matzke@llnl.gov> | 1997-08-04 16:19:57 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1997-08-04 16:19:57 (GMT) |
commit | 6a3cb617d3aa57f439065118fbc68afcb1465a54 (patch) | |
tree | b9062c04a678e7615a437afe04fc7ca86f06efc7 /src/debug.c | |
parent | 5cc4d0dcde9fb0f5a941c90a1de9ab964d09a163 (diff) | |
download | hdf5-6a3cb617d3aa57f439065118fbc68afcb1465a54.zip hdf5-6a3cb617d3aa57f439065118fbc68afcb1465a54.tar.gz hdf5-6a3cb617d3aa57f439065118fbc68afcb1465a54.tar.bz2 |
[svn-r12] ./src/H5AC.c
Fails sooner if the type of object requested doesn't match
the type of object cached.
./src/H5B.c
./src/H5Bprivate.h
./src/H5Fprivate.h
./src/H5G.c
./src/H5Gnode.c
./src/H5Gprivate.h
./src/H5H.c
./src/H5Hprivate.h
Changed lots of `H5*_HDR_SIZE' macros to `H5*_SIZEOF_HDR' to make
things more consistent.
Added H5*_SIZEOF_MAGIC macros.
Added debugging functions to some of the packages.
./src/H5F.c
Fixed a bug with reading past the end of a buffer.
./src/H5Tproto.h
Added prototypes for H5Tadd_field() and H5Tget_fields().
./src/debug.c
Low-level file debugging program.
./src/Makefile
Builds `debug' as one of the main targets. The target is
called `debug_hdf5' so it doesn't conflict with the `debug'
target that was already there. But the executable is called
`debug'.
Diffstat (limited to 'src/debug.c')
-rw-r--r-- | src/debug.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/debug.c b/src/debug.c new file mode 100644 index 0000000..f061d4c --- /dev/null +++ b/src/debug.c @@ -0,0 +1,142 @@ +/*------------------------------------------------------------------------- + * Copyright (C) 1997 National Center for Supercomputing Applications. + * All rights reserved. + * + *------------------------------------------------------------------------- + * + * Created: debug.c + * Jul 18 1997 + * Robb Matzke <robb@maya.nuance.com> + * + * Purpose: Debugs an existing HDF5 file at a low level. + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +#include "hdf5.h" + +#include "H5private.h" +#include "H5Bprivate.h" +#include "H5Fprivate.h" +#include "H5Gprivate.h" +#include "H5Hprivate.h" + +#define INDENT 3 +#define VCOL 50 + + +/*------------------------------------------------------------------------- + * Function: main + * + * Usage: debug FILENAME [OFFSET] + * + * Return: Success: exit (0) + * + * Failure: exit (non-zero) + * + * Programmer: Robb Matzke + * robb@maya.nuance.com + * Jul 18 1997 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +int +main (int argc, char *argv[]) +{ + hatom_t fid; + hdf5_file_t *f; + haddr_t addr = 0; + uint8 sig[16]; + intn i; + + /* + * Parse command arguments. + */ + if (argc>2) { + printf ("New address: %s\n", argv[2]); + addr = strtol (argv[2], NULL, 0); + } + + /* + * Open the file and get the file descriptor. + */ + if ((fid = H5Fopen (argv[1], 0, 0))<0) { + fprintf (stderr, "cannot open file\n"); + exit (1); + } + if (NULL==(f=H5Aatom_object (fid))) { + fprintf (stderr, "cannot obtain hdf5_file_t pointer\n"); + exit (2); + } + + /* + * Read the signature at the specified file position. + */ + printf ("Reading signature at byte %lu\n", (unsigned long)addr); + if (H5F_block_read (f, addr, sizeof(sig), sig)<0) { + fprintf (stderr, "cannot read signature\n"); + exit (3); + } + + if (!memcmp (sig, HDF5_FILE_SIGNATURE, HDF5_FILE_SIGNATURE_LEN)) { + /* + * Debug the boot block. + */ + H5F_debug (f, 0, stdout, 0, VCOL); + + } else if (!memcmp (sig, H5H_MAGIC, H5H_SIZEOF_MAGIC)) { + /* + * Debug a heap. + */ + H5H_debug (f, addr, stdout, 0, VCOL); + + } else if (!memcmp (sig, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC)) { + /* + * Debug a symbol table node. + */ + H5G_node_debug (f, addr, stdout, 0, VCOL); + + } else if (!memcmp (sig, H5B_MAGIC, H5B_SIZEOF_MAGIC)) { + /* + * Debug a B-tree. B-trees are debugged through the B-tree + * subclass. The subclass identifier is the byte immediately + * after the B-tree signature. + */ + H5B_subid_t subtype = sig[H5B_SIZEOF_MAGIC]; + switch (subtype) { + case H5B_SUBTYPE_SNODE: + H5G_node_debug (f, addr, stdout, 0, VCOL); + break; + + default: + fprintf (stderr, "Unknown B-tree subtype %u\n", (unsigned)(subtype)); + exit (4); + } + + } else { + /* + * Got some other unrecognized signature. + */ + printf ("%-*s ", VCOL, "Signature:"); + for (i=0; i<8; i++) { + if (sig[i]>' ' && sig[i]<='~' && '\\'!=sig[i]) { + putchar (sig[i]); + } else if ('\\'==sig[i]) { + putchar ('\\'); + putchar ('\\'); + } else { + printf ("\\%03o", sig[i]); + } + } + putchar ('\n'); + + fprintf (stderr, "unknown signature\n"); + exit (4); + } + + H5Fclose (fid); + exit (0); +} |