Linux Archive

Linux Archive (
-   Crash Utility (
-   -   display function parameters for call stack (

Dave Anderson 09-25-2012 01:54 PM

display function parameters for call stack
----- Original Message -----

> I find print_frame_args in gdb/stack.c seems to be the function to print out
> the argument's name. Its working mechanism is exacting out all symbols
> in the specified function with ALL_BLOCK_SYMBOLS. Then discard those symbol
> not as argument by SYMBOL_IS_ARGUMENT. At last it would get the argument

I think the problem you'll have there is the frame_info structure that
gets passed in to print_frame_args(). But maybe you can pull out a
subset of that function to just access the argument names from the
text symbol?

> So how could I reach this print_frame_args by crash, need modify gdb side
> to create such helper function?
> I am not familiar with the gdb modification...
> Is there any example to show me how to do this change?
> It is better that the example itself contains how to connect the
> change with crash. :)

For examples, check out any of the current users of gdb_interface().
They all set up a gnu_request structure with a command and any other
information required, and pass it into the gdb module.

To test your code, you can borrow the GNU_DEBUG_COMMAND command.

For example, you could create a function like this, which passes
the text symbol's name into the gdb module:

your_function(char *text_symbol)
struct gnu_request request, *req = &request;

req->command = GNU_DEBUG_COMMAND;
req->flags |= GNU_RETURN_ON_ERROR;
req->name = text_symbol;
* fill in any other fields in the gnu_request struct

if (req->flags & GNU_COMMAND_FAILED) {
goto error_out;


The gnu_request structure has several other general-purpose members
that you can use if more than the symbol name string is required.

Then, the gdb_interface() call above will end up here in

gdb_command_funnel(struct gnu_request *req)
struct symbol *sym;

if (req->command != GNU_VERSION) {
replace_ui_file_FILE(gdb_stdout, req->fp);
replace_ui_file_FILE(gdb_stderr, req->fp);
do_cleanups((struct cleanup *)0);

switch (req->command)
...[ cut ] ...


... [ cut ] ...

And you can do whatever you want in gdb_debug_command(), which is
also located in gdb-7.3.1/gdb/symtab.c:

static void
gdb_debug_command(struct gnu_request *req)


If you can get something working, we can add a new gdb
GNU_XXXX command that does what you want.


Crash-utility mailing list

All times are GMT. The time now is 07:20 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.