Re: Unexpected behavior of `gdb.PARAM_INTEGER` and `gdb.PARAM_UINTEGER` parameter

Andrew Burgess via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
利承昕 via Gdb <[email protected]> writes:

> Hi,
>
> I've noticed that if we use Python API to create a `gdb.PARAM_INTEGER` or
> `gdb.PARAM_UINTEGER` parameter this way:
>
> ```
> $ cat test.py
>
> import gdb
> class ExampleParam(gdb.Parameter):
>     def __init__ (self, name):
>         super(ExampleParam, self).__init__ (name, gdb.COMMAND_DATA,
> gdb.PARAM_INTEGER)
>         self.value = 0
>         self.saved_value = True
>
>     def get_set_string (self):
>         print(self.value)
>         return "Set to %r" % self.value
>
> ExampleParam("example”)
> ```
>
> According to the docs here:
> https://sourceware.org/gdb/onlinedocs/gdb/Parameters-In-Python.html, `0`
> should be interpreted to mean "unlimited", so I expected that when a
> `gdb.PARAM_INTEGER` or `gdb.PARAM_UINTEGER` parameter’s value is
> "unlimited" in GDB, then the value in Python will be interpreted to 0.

You are correct that this area is not well documented.  These parameter
types have always returned None for unlimited, so I don't think we'd
want to consider changing the behaviour at this point.

There is already a related patch on the mailing list that will improve
the documentation of these parameter types:

  https://sourceware.org/pipermail/gdb-patches/2022-October/193253.html

Thanks,
Andrew

>
> But somehow, GDB interprets `None` to mean "unlimited" for that parameter
> we created:
>
> ```
> $ gdb -q -nx -ex 'source test.py’
> (gdb) show example
> The current value of 'example' is "unlimited”.
> (gdb) pi gdb.parameter("example") is None
> True
> (gdb) set example unlimited
> None
> Set to None
> (gdb) pi gdb.parameter("example") is None
> True
> (gdb) show example
> The current value of 'example' is "unlimited".
> (gdb) set example 0
> None
> Set to None
> (gdb) pi gdb.parameter("example") is None
> True
> (gdb) show example
> The current value of 'example' is "unlimited".
> ```
>
> You can notice that GDB set the value of the `example` to `None` instead of
> `0`.
>
> Is this the expected result?
>
> My GDB version is GNU gdb (Ubuntu 12.0.90-0ubuntu1) 12.0.90, and I'm on
> Ubuntu 22.04.1 LTS.
>
> Best Regards,
> Alan Li
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.