From: Vladimir Prus <ghost@cs.msu.su>
To: Nick Roberts <nickrob@snap.net.nz>, gdb-patches@sources.redhat.com
Subject: Re: variable objects and registers
Date: Tue, 19 Dec 2006 17:59:00 -0000 [thread overview]
Message-ID: <E1GwjEo-00030H-Me@zigzag.lvk.cs.msu.su> (raw)
In-Reply-To: <17782.41205.881283.845357@kahikatea.snap.net.nz>
Nick Roberts wrote:
> Vladimir Prus writes:
>> This patch adds new command -var-registers that creates and returns a
>> list of variable objects for all registers gdb knows. The command takes
>> one option -- the frame, which is specified just like for -var-create.
>> While not all registers are saved, and so gdb might not know values of
>> some registers in parent frames, for some registers it's possible, and
>> frontends might want to access those values.
>
>
>> Here's example output:
>
>> -var-registers *
>> ^done,registers={
> ^done,registers=[
Doh!
>
>>{name="var1",exp="$eax",numchild="0",value="16",type="int"},
>>............
>> {name="var10",exp="$eflags",numchild="0",value="[ SF IF ID
>> {]",
>
>
> Since this command creates new variable objects, perhaps it should be
> called something like -var-create-registers.
I'm not sure, since the command does not creates registers, it creates
variable objects, and
-var-create-for-registers
is a bit long. Maybe
-var-list-registers
I'm unsure about right naming.
>
> Alternatively, taking things further, instead of reusing some code for
> each command through create_varobj_in_frame, perhaps you could have just
> one command:
>
> "-var-create" and "-var-create -r" for registers ("-var-create -m" for
> memory-mapped registers).
>
> I've not thought it through, I'm just brainstorming.
We also need a command to create varobj for all locals, because with
variable hiding, you can't create them using expression. Would that be
-var-create -l
? Or maybe we should not mix easy "create one varobj from expression"
command with "create a bunch of varobj" command and add the following:
-var-create-and-list --registers ...
-var-create-and-list --locals ...
-var-create-and-list --whatever-else ...
or just "-var-list"? On the other hand, on Apple branch the varobjs for
locals are created using
-stack-list-locals --make-varobjs
I slightly prefer
-var-list --locals
but again, not 100% sure.
> --- gdb/mi/mi-cmd-var.c (/patches/gdb/varobj_printing/gdb_mainline)
> (revision 2338)
> +++ gdb/mi/mi-cmd-var.c (/patches/gdb/varobj_for_registers/gdb_mainline)
> (revision 2338) @@ -68,16 +68,39 @@
>
> /* VAROBJ operations */
>
> +static struct varobj *
> +create_varobj_in_frame (char *name, char *expression, char *frame)
> +{
> + CORE_ADDR frameaddr = 0;
> + struct cleanup *cleanup;
> + enum varobj_type var_type;
> +
> + if (strcmp (frame, "*") == 0)
> + var_type = USE_CURRENT_FRAME;
> + else if (strcmp (frame, "@") == 0)
> + var_type = USE_SELECTED_FRAME;
> + else
> + {
> + var_type = USE_SPECIFIED_FRAME;
> + frameaddr = string_to_core_addr (frame);
> + }
> +
> + if (varobjdebug)
> + fprintf_unfiltered (gdb_stdlog,
> + "Name=\"%s\", Frame=\"%s\" (0x%s), Expression=\"%s\"\n",
> + name, frame, paddr (frameaddr), expression);
> +
> + return varobj_create (name, expression, frameaddr, var_type);
> +}
> +
>
> I think the function above should go in varobj.c
Then, the varobj.c would have to expose magic "@" and "*" values in its
interface. I think it's better to keep this closer to parsing code and keep
varobj.c separated.
>
>
> ...
> + numregs = NUM_REGS + NUM_PSEUDO_REGS;
> +
> + make_cleanup_ui_out_tuple_begin_end (uiout, "registers");
>
> I think this should be
>
> make_cleanup_ui_out_list_begin_end (uiout, "registers");
Yeah, fixed.
> + for (regnum = 0; regnum < numregs; regnum++)
> + {
> + if (REGISTER_NAME (regnum) != NULL
> + && *(REGISTER_NAME (regnum)) != '\0')
> + {
> + char *name;
> + char *expression;
> + struct varobj *var;
> + struct cleanup *cleanup_child;
> +
> + name = varobj_gen_name ();
> + make_cleanup (free_current_contents, &name);
> +
> + expression = xstrprintf ("$%s", REGISTER_NAME (regnum));
> + make_cleanup (xfree, expression);
> +
> + var = create_varobj_in_frame (name, expression, frame);
> +
> + cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
> + print_varobj (var, PRINT_ALL_VALUES, 1 /* print expression */);
> + do_cleanups (cleanup_child);
> + }
> + }
> +
> + do_cleanups (cleanup);
> + return MI_CMD_DONE;
> +}
> +
> +
> +enum mi_cmd_result
> mi_cmd_var_delete (char *command, char **argv, int argc)
> {
> char *name;
>
>
> Daniel Jacobowitz writes:
>
>> No one else had any comments, and it looks fine to me. The patch looks
>> OK too. It'll want a testcase, naturally.
>
> And documentation too, hopefully!
Sure. We'd need to decide on command name, though.
Thanks,
Volodya
next prev parent reply other threads:[~2006-12-19 17:59 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-06 10:57 Nick Roberts
2006-12-19 17:59 ` Vladimir Prus [this message]
2006-12-19 21:58 ` Nick Roberts
2006-12-20 18:39 ` Vladimir Prus
2006-12-20 20:34 ` Nick Roberts
2006-12-21 1:34 ` Nick Roberts
2006-12-21 6:34 ` Vladimir Prus
2006-12-21 7:57 ` Nick Roberts
2006-12-21 8:34 ` Vladimir Prus
2006-12-30 20:26 ` Daniel Jacobowitz
2006-12-30 20:41 ` Vladimir Prus
2006-12-30 20:50 ` Daniel Jacobowitz
2006-12-30 23:05 ` Nick Roberts
2006-12-21 6:43 ` Vladimir Prus
2006-12-21 8:34 ` Nick Roberts
[not found] ` <0E190425-7C4F-4C6E-B8B3-9A3FA79F6FE3@apple.com>
2006-12-21 23:30 ` Nick Roberts
[not found] ` <1B6B17FA-65DE-4CE2-9BE0-20DA74780EEA@apple.com>
2006-12-22 4:47 ` Nick Roberts
2006-12-22 6:23 ` Vladimir Prus
2006-12-22 6:51 ` Nick Roberts
2006-12-22 7:30 ` Vladimir Prus
2007-01-05 9:04 ` Vladimir Prus
-- strict thread matches above, loose matches on Subject: below --
2006-11-29 17:21 Vladimir Prus
2006-12-05 21:16 ` Daniel Jacobowitz
2006-12-06 9:25 ` Vladimir Prus
2006-12-19 22:02 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1GwjEo-00030H-Me@zigzag.lvk.cs.msu.su \
--to=ghost@cs.msu.su \
--cc=gdb-patches@sources.redhat.com \
--cc=nickrob@snap.net.nz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox