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

利承昕 alan.li.ncu@g.ncu.edu.tw
Sat Oct 22 08:36:13 GMT 2022


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.

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


More information about the Gdb mailing list