[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] qemu-gdb: add a QObject pretty printer
From: |
Eduardo Habkost |
Subject: |
Re: [Qemu-devel] [PATCH] qemu-gdb: add a QObject pretty printer |
Date: |
Fri, 18 Jan 2019 17:34:44 -0200 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Fri, Jan 18, 2019 at 05:48:43PM +0400, Marc-André Lureau wrote:
> Inspired by GObject/GType pretty printer.
>
> Example:
> machine_set_accel (obj=0x555556807550 [pc-i440fx-4.0-machine],...
>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
> scripts/qemu-gdb.py | 58 +++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
> mode change 100644 => 100755 scripts/qemu-gdb.py
>
> diff --git a/scripts/qemu-gdb.py b/scripts/qemu-gdb.py
> old mode 100644
> new mode 100755
> index 690827e6fc6..90c6fd13b93
> --- a/scripts/qemu-gdb.py
> +++ b/scripts/qemu-gdb.py
> @@ -21,6 +21,9 @@ import gdb
>
> import os, sys
>
> +if sys.version_info[0] >= 3:
> + long = int
[...]
> +class QObjectPrinter:
> + def __init__(self, val):
> + self.val = val
> +
> + def to_string(self):
> + name = object_class_name(self.val)
> + if name:
> + return ("0x%x [%s]")% (long(self.val), name)
> + return ("0x%x") % (long(self.val))
I took a while to find out that int(v) doesn't work if v is a
pointer gdb value. This is surprising, because int(long_number)
(e.g. int(2**65)) works on Python 2.
Also, this works on Python 2:
int(self.val.cast(gdb.lookup_type("unsigned long long")))
But it's so ugly that a sys.version_info check still sounds
better.
I would prefer this, though:
if sys.version_info[0] < 3:
int = long
...
def to_string(self):
...
return ("0x%x") % (int(self.val))
Because it makes the python2-specific code easier to remove in
the future.
> +
> +
> +def lookup_type(val):
> + if is_object(val):
> + return QObjectPrinter(val)
> + return None
> +
> +
> +gdb.pretty_printers.append(lookup_type)
> --
> 2.20.1.98.gecbdaf0899
>
--
Eduardo