[PING][PATCH] Fix behaviour of 'show' commands in hook functions in MI mode
Thomas Perry
tperry981@gmail.com
Thu Dec 11 13:34:00 GMT 2014
Ping again. It would be great if someone could have a brief look over this.
On 01/12/14 13:31, Thomas Perry wrote:
> Ping.
>
> On 14/11/14 10:40, Thomas Perry wrote:
>> Hi,
>>
>> This is my first patch, so apologies in advance for anything that I
>> haven't done quite right.
>>
>> In console mode, if I add a 'hook-run' which executes (for example)
>> 'show inferior-tty', the result is printed before the run, and if I add
>> a 'hookpost-run' with the same command, the result is printed after the
>> run. This behaviour matches the documentation (and my expectations).
>>
>> In MI mode, 'show' commands in post-execution hooks seem to be ignored,
>> and the result of a 'show' in a pre-execution hook is printed AFTER the
>> hooked command has terminated, for example in an exec-async-output
>> record as follows:
>>
>> *stopped,value="<result of show command>",reason="exited-normally"
>>
>> The following patch modifies the behaviour of a 'show' command executed
>> in a hook function in MI mode, so that it will print the result using
>> the console-mode behaviour, wrapped up as an MI console-stream-output
>> record.
>>
>> I hope this is reasonable -- please get in touch if it warrants
>> discussion.
>>
>> To reproduce:
>>
>> echo "int main() { }" | gcc -x c -
>> echo -e "set inferior-tty /dev/null\ndefine hook-run\nshow \
>> inferior-tty\nend\nrun\nquit" > x
>> gdb -i=mi -x x ./a.out
>>
>> Patch:
>>
>> * cli/cli-setshow.c: Print the results of 'show' commands in hook
>> functions in MI mode using the console-mode behaviour.
>>
>> diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c
>> index a7d0728..1659fca 100644
>> --- a/gdb/cli/cli-setshow.c
>> +++ b/gdb/cli/cli-setshow.c
>> @@ -21,6 +21,7 @@
>> #include <ctype.h>
>> #include "arch-utils.h"
>> #include "observer.h"
>> +#include "top.h"
>>
>> #include "ui-out.h"
>>
>> @@ -649,7 +650,7 @@ do_show_command (const char *arg, int from_tty,
>> struct cmd_list_element *c)
>> code to print the value out. For the latter there should be
>> MI and CLI specific versions. */
>>
>> - if (ui_out_is_mi_like_p (uiout))
>> + if (ui_out_is_mi_like_p (uiout) && !in_user_command)
>> ui_out_field_stream (uiout, "value", stb);
>> else
>> {
>
More information about the Gdb-patches
mailing list