chorg has asked for the wisdom of the Perl Monks concerning the following question:

How can I use the perl debugger to view complex data structures? I got some help with the x command, but I would _really like to see the values of references and other complex data structures. How to do?
_______________________________________________
"Intelligence is a tool used achieve goals, however goals are not always chosen wisely..."

Replies are listed 'Best First'.
Re: Debugging Complex Structures
by Dominus (Parson) on Nov 24, 2000 at 00:07 UTC
    One thind you might try it to get the Data::Dumper module. Then in the debugger, enter the command:
    use Data::Dumper;
    Now you can print out the value of a variable by using
    p Dumper($var)
    If you don't like the x format, you might like this better. Data::Dumper has a lot of options for controlling the way the output looks. See the manual for modre details.

Re: Debugging Complex Structures
by brother ab (Scribe) on Nov 24, 2000 at 14:06 UTC

    I use Data::Dumper if object is not very big. If it is huge I prefer Data::Walker.

    In debugger enter Data::Walker->cli($big_obj) and use 'ls' (or even 'ls -l') and 'cd' commands to navigate the object. ^D to quit. By the way, don't forget to say use Data::Walker or -MData::Walker.

    -- brother ab
Re: Debugging Complex Structures
by merlyn (Sage) on Nov 23, 2000 at 23:31 UTC
    Hmm. Last I looked, the x operation does drill down into the reference structure, following it as far as it can. What did you try that didn't work?

    -- Randal L. Schwartz, Perl hacker

      I tried to view a DBI statment handle object. I got nothing. I was able to view arrays and hashes however. I really want to see (if possible) object structures however. I'll give the Data Dumper thing a try too.
      _______________________________________________
      "Intelligence is a tool used achieve goals, however goals are not always chosen wisely..."
        chorg says:
        > I tried to view a DBI statment handle object.
        DBI's internal objects are very weird. You are not supposed to be poking around in them anyway; there is nothing useful to be seen there, unless you are writing your own DBD:: module.

        > I got nothing.
        You got nothing because there is nothing to get; the object has nothing in it. Data::Dumper will show you the same thing, because that is the truth. A DBI statement handle object is a reference to an empty tied hash.

        The hash is tied to an object which is implemented (probably) with another hash that actually contains real member data. You can see this by doing:

        x tied %$sth
        in the debugger. But I don't really understand what you think you're going to accomplish by looking into the internals of the DBI object---it's unlikely that you will find anything there that you can 'debug'.

        For most ordinary objects, you will not have to do this. The x command will do what you want.