Discussion:
[Bug python/23669] New: gdb.execute("show commands") doesn't work
simon.marchi at ericsson dot com
2018-09-16 13:18:37 UTC
Permalink
https://sourceware.org/bugzilla/show_bug.cgi?id=23669

Bug ID: 23669
Summary: gdb.execute("show commands") doesn't work
Product: gdb
Version: HEAD
Status: NEW
Severity: normal
Priority: P2
Component: python
Assignee: unassigned at sourceware dot org
Reporter: simon.marchi at ericsson dot com
Target Milestone: ---

With gdb 8.2:

This command:

(gdb) show commands
32 commands
33 commands
34 python gdb.execute("show commands")
35 python gdb.execute("show version")
36 python gdb.execute("show version")
37 python gdb.execute("show commands")
38 python gdb.execute("show commands")
39 help
40 show commands
41 show commands

When executed with gdb.execute, doesn't work:

(gdb) python gdb.execute("show commands")
warning: bad breakpoint number at or near '0'

GDB appears to try to run the "commands" command and complain about the lack of
breakpoint number. With GDB master, it still tries to invoke the "commands"
command, but the output is silent.
--
You are receiving this mail because:
You are on the CC list for the bug.
simon.marchi at ericsson dot com
2018-09-16 17:43:26 UTC
Permalink
https://sourceware.org/bugzilla/show_bug.cgi?id=23669

--- Comment #1 from Simon Marchi <simon.marchi at ericsson dot com> ---
This started to fail at

56bcdbea2bed ("Let gdb.execute handle multi-line commands")

which means it started to fail in gdb 8.2. A fix for this could make its way
in gdb 8.2.1. I have a tentative fix, which is to get rid of
command_name_equals.
--
You are receiving this mail because:
You are on the CC list for the bug.
simon.marchi at ericsson dot com
2018-09-16 17:43:45 UTC
Permalink
https://sourceware.org/bugzilla/show_bug.cgi?id=23669

Simon Marchi <simon.marchi at ericsson dot com> changed:

What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |8.2.1
--
You are receiving this mail because:
You are on the CC list for the bug.
cvs-commit at gcc dot gnu.org
2018-09-17 12:28:04 UTC
Permalink
https://sourceware.org/bugzilla/show_bug.cgi?id=23669

--- Comment #2 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Simon Marchi <***@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=8588b356927dabd582d1d67f87a161027cb2aed1

commit 8588b356927dabd582d1d67f87a161027cb2aed1
Author: Simon Marchi <***@polymtl.ca>
Date: Mon Sep 17 08:26:24 2018 -0400

python: Make gdb.execute("show commands") work (PR 23669)

Since commit

56bcdbea2bed ("Let gdb.execute handle multi-line commands")

trying to use a command like gdb.execute("show commands") in Python
fails. GDB ends up trying to run the "commands" command.

The reason is that GDB gets confused with the special "commands"
command. In process_next_line, the lookup_cmd_1 function returns the
cmd_list_element representing the "commands" sub-command of "show".
Lower, we check the cmd_list_element to see if it matches various
control commands by name, including the "commands" command. This is
where we wrongfully conclude that the executed command must be
"commands", when in reality it was "show commands".

The fix proposed in this patch removes the comparisons by name, instead
comparing the cmd_list_element object by pointer with the objects
created at initialization time.

Tested on the buildbot, though on a single builder (Fedora-x86_64-m64).

gdb/ChangeLog:

PR python/23669
* breakpoint.c (commands_cmd_element): New.
(_initialize_breakpoint): Assign commands_cmd_element.
* breakpoint.h (commands_cmd_element): New.
* cli/cli-script.c (while_cmd_element, if_command,
define_cmd_element): New.
(command_name_equals): Remove.
(process_next_line): Compare commands by pointer, not by name.
(_initialize_cli_script): Assign the various cmd_list_element
variables.
* compile/compile.c (compile_cmd_element): New.
(_initialize_compile): Assign compile_cmd_element.
* compile/compile.h (compile_cmd_element): New.
* guile/guile.c (guile_cmd_element): New.
(install_gdb_commands): Assign guile_cmd_element.
* guile/guile.h (guile_cmd_element): New.
* python/python.c (python_cmd_element): New.
(_initialize_python): Assign python_cmd_element.
* python/python.h (python_cmd_element): New.
* tracepoint.c (while_stepping_cmd_element): New.
(_initialize_tracepoint): Assign while_stepping_cmd_element.
* tracepoint.h (while_stepping_cmd_element): New.

gdb/testsuite/ChangeLog:

PR python/23669
* gdb.python/python.exp: Test gdb.execute("show commands").
--
You are receiving this mail because:
You are on the CC list for the bug.
cvs-commit at gcc dot gnu.org
2018-09-17 18:18:23 UTC
Permalink
https://sourceware.org/bugzilla/show_bug.cgi?id=23669

--- Comment #3 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The gdb-8.2-branch branch has been updated by Simon Marchi
<***@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b13ab533d38674e6273eb78eeef261d5b0655bbf

commit b13ab533d38674e6273eb78eeef261d5b0655bbf
Author: Simon Marchi <***@polymtl.ca>
Date: Mon Sep 17 08:26:24 2018 -0400

python: Make gdb.execute("show commands") work (PR 23669)

Since commit

56bcdbea2bed ("Let gdb.execute handle multi-line commands")

trying to use a command like gdb.execute("show commands") in Python
fails. GDB ends up trying to run the "commands" command.

The reason is that GDB gets confused with the special "commands"
command. In process_next_line, the lookup_cmd_1 function returns the
cmd_list_element representing the "commands" sub-command of "show".
Lower, we check the cmd_list_element to see if it matches various
control commands by name, including the "commands" command. This is
where we wrongfully conclude that the executed command must be
"commands", when in reality it was "show commands".

The fix proposed in this patch removes the comparisons by name, instead
comparing the cmd_list_element object by pointer with the objects
created at initialization time.

Tested on the buildbot, though on a single builder (Fedora-x86_64-m64).

gdb/ChangeLog:

PR python/23669
* breakpoint.c (commands_cmd_element): New.
(_initialize_breakpoint): Assign commands_cmd_element.
* breakpoint.h (commands_cmd_element): New.
* cli/cli-script.c (while_cmd_element, if_command,
define_cmd_element): New.
(command_name_equals): Remove.
(process_next_line): Compare commands by pointer, not by name.
(_initialize_cli_script): Assign the various cmd_list_element
variables.
* compile/compile.c (compile_cmd_element): New.
(_initialize_compile): Assign compile_cmd_element.
* compile/compile.h (compile_cmd_element): New.
* guile/guile.c (guile_cmd_element): New.
(install_gdb_commands): Assign guile_cmd_element.
* guile/guile.h (guile_cmd_element): New.
* python/python.c (python_cmd_element): New.
(_initialize_python): Assign python_cmd_element.
* python/python.h (python_cmd_element): New.
* tracepoint.c (while_stepping_cmd_element): New.
(_initialize_tracepoint): Assign while_stepping_cmd_element.
* tracepoint.h (while_stepping_cmd_element): New.

gdb/testsuite/ChangeLog:

PR python/23669
* gdb.python/python.exp: Test gdb.execute("show commands").
--
You are receiving this mail because:
You are on the CC list for the bug.
simon.marchi at ericsson dot com
2018-09-17 18:19:17 UTC
Permalink
https://sourceware.org/bugzilla/show_bug.cgi?id=23669

Simon Marchi <simon.marchi at ericsson dot com> changed:

What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution|--- |FIXED

--- Comment #4 from Simon Marchi <simon.marchi at ericsson dot com> ---
Fixed by the patch above.
--
You are receiving this mail because:
You are on the CC list for the bug.
Loading...