[Crash-utility] Re: Redirect with crash gdb commands

Dave Anderson anderson at redhat.com
Tue Sep 15 13:12:02 UTC 2009


----- "Bob Montgomery" <bob.montgomery at hp.com> wrote:

> I really like to use the x command in crash, as in:
> 
> crash-4.0.9> x/256xg 0xffff8801aa9c8000
> 0xffff8801aa9c8000:     0xffff8800c61541c0      0xffff880145a194c0
> 0xffff8801aa9c8010:     0xffff88016fa481c0      0xffff88016c7980c0
> ...
> 
> 
> I like it better than the rd command (because of prior familiarity
> perhaps?):
> crash-4.0.9> rd -x -64 0xffff8801aa9c8000 256
> ffff8801aa9c8000:  ffff8800c61541c0 ffff880145a194c0
> ffff8801aa9c8010:  ffff88016fa481c0 ffff88016c7980c0
> ...

BTW, you don't need the "-x", the "-64", or the "0x" -- given that they are
the defaults.  So "rd" beats "x" 21 to 25 in keystrokes required...  ;-)

> 
> But I *really* like crash's ability to pipe and redirect commands, but
> that doesn't work with the x command:
> 
> crash-4.0.9> x/256xg 0xffff8801aa9c8000 | grep ffff880145a194c0
> crash-4.0.9>
> 
> But it works with rd:
> 
> crash-4.0.9> rd -x -64 0xffff8801aa9c8000 256 | grep ffff880145a194c0
> ffff8801aa9c8000:  ffff8800c61541c0 ffff880145a194c0
> crash-4.0.9>
> 
> Another fun one:
> crash-4.0.9> x/256xg 0xffff8801aa9c8000 | head
> Argument to arithmetic operation not a number or boolean.
> 
> 
> If you redirect the output of x, you get a file containing an error
> message:
> 
> crash-4.0.9> x/256xg 0xffff8801aa9c8000 >xold.out
> crash-4.0.9> !sh
> sh-3.2$ cat xold.out
> No symbol "xold" in current context.
> sh-3.2$
> 
> The problem is that the setup of gdb commands in is_gdb_command() with
> merge_orig_args set puts the "| thing" or "> thing" back onto the
> command it is building to be passed through to gdb.
> 
> I first thought that cmd_gdb() passing a NULL, instead of the fp with
> the redirection set up, into gdb_pass_through was part of the problem
> also, but that seems to be dealt with later in gdb_interface.
> 
> There might some other reason for the strange behavior of
> merge_orig_args that my testing has not found.  But otherwise, the
> attached patch will allow my favorite x command to be sent through pipes
> and redirected to files.

Nice.  

What your patch does is to accurately mimic what happens when you 
precede your command with "gdb", as in:

  crash> gdb x/256xg 0xffff8801aa9c8000 > xold.out

The syntax above works with crash as it is now, but your patch allows
it to work without having to prepend the "gdb".  I never noticed
that anomoly before, probably because I rarely use gdb commands, and
when I do, I usually don't redirect them.

Queued for the next release.

Thanks,
  Dave




More information about the Crash-utility mailing list