Bug 14639 - gdb.parameter doesn't flag ambiguous parameter spellings
Summary: gdb.parameter doesn't flag ambiguous parameter spellings
Status: RESOLVED FIXED
Alias: None
Product: gdb
Classification: Unclassified
Component: python (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: 15.1
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-09-27 23:13 UTC by dje
Modified: 2024-02-07 19:02 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description dje 2012-09-27 23:13:09 UTC
GNU gdb (GDB) 7.5.50.20120927-cvs
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) py import gdb
(gdb) set print sym on
Ambiguous set print command "sym on": symbol, symbol-filename.
(gdb) py print gdb.parameter("print sym")
False
(gdb) 


Code that needs to work with multiple gdb versions should be able to rely on gdb.parameter raising an exception if setting that parameter is an error.
Comment 1 Tom Tromey 2023-12-16 00:22:02 UTC
I heard of an OS once that only allowed command abbreviations
interactively -- scripts had to use the full name.
I wish we'd done this with the Python API.
Comment 2 Sourceware Commits 2024-02-07 19:01:24 UTC
The master branch has been updated by Hannes Domani <ssbssa@sourceware.org>:

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

commit 276d9db22d768e6904937b8def1b05771588092b
Author: Hannes Domani <ssbssa@yahoo.de>
Date:   Wed Feb 7 19:59:29 2024 +0100

    Raise exception if ambiguous name is used in gdb.parameter
    
    Currently gdb.parameter doesn't raise an exception if an
    ambiguous name is used, it instead returns the value of the
    last partly matching parameter:
    ```
    (gdb) show print sym
    Ambiguous show print command "sym": symbol, symbol-filename, symbol-loading.
    (gdb) show print symbol-loading
    Printing of symbol loading messages is "full".
    (gdb) py print(gdb.parameter("print sym"))
    full
    ```
    
    It's because lookup_cmd_composition_1 tries to detect
    ambigous names by checking the return value of find_cmd
    for CMD_LIST_AMBIGUOUS, which never happens, since only
    lookup_cmd_1 returns CMD_LIST_AMBIGUOUS.
    Instead the nfound argument contains the number of found
    matches.
    
    By using it instead, and by setting *CMD to the special value
    CMD_LIST_AMBIGUOUS in this case, gdbpy_parameter can now show
    the appropriate error message:
    ```
    (gdb) py print(gdb.parameter("print sym"))
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    RuntimeError: Parameter `print sym' is ambiguous.
    Error while executing Python code.
    (gdb) py print(gdb.parameter("print symbol"))
    True
    (gdb) py print(gdb.parameter("print symbol-"))
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    RuntimeError: Parameter `print symbol-' is ambiguous.
    Error while executing Python code.
    (gdb) py print(gdb.parameter("print symbol-load"))
    full
    ```
    
    Since the document command also uses lookup_cmd_composition, it needed
    to check for CMD_LIST_AMBIGUOUS as well, so it now also shows an
    "Ambiguous command" error message in this case.
    
    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=14639
    Approved-By: Tom Tromey <tom@tromey.com>
Comment 3 Hannes Domani 2024-02-07 19:02:33 UTC
Fixed.