gdb: Fix python style

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5986>
This commit is contained in:
Thibault Saunier 2023-08-31 18:52:58 -04:00 committed by GStreamer Marge Bot
parent 6258ee56d2
commit f1070b4380
2 changed files with 67 additions and 59 deletions

View file

@ -8,7 +8,9 @@ if sys.version_info[0] >= 3:
long = int long = int
# This is not quite right, as local vars may override symname # This is not quite right, as local vars may override symname
def read_global_var (symname):
def read_global_var(symname):
return gdb.selected_frame().read_var(symname) return gdb.selected_frame().read_var(symname)
@ -43,14 +45,15 @@ def g_quark_to_string(quark):
return None return None
## ##
## imported from glib: gobject/gobject_gdb.py # imported from glib: gobject/gobject_gdb.py
## ##
def g_type_to_typenode (gtype):
def lookup_fundamental_type (typenode): def g_type_to_typenode(gtype):
def lookup_fundamental_type(typenode):
if typenode == 0: if typenode == 0:
return None return None
val = read_global_var ("static_fundamental_type_nodes") val = read_global_var("static_fundamental_type_nodes")
if val is None: if val is None:
return None return None
return val[typenode >> 2].address return val[typenode >> 2].address
@ -58,24 +61,26 @@ def g_type_to_typenode (gtype):
gtype = long(gtype) gtype = long(gtype)
typenode = gtype - gtype % 4 typenode = gtype - gtype % 4
if typenode > (255 << 2): if typenode > (255 << 2):
typenode = gdb.Value(typenode).cast (gdb.lookup_type("TypeNode").pointer()) typenode = gdb.Value(typenode).cast(gdb.lookup_type("TypeNode").pointer())
else: else:
typenode = lookup_fundamental_type (typenode) typenode = lookup_fundamental_type(typenode)
return typenode return typenode
def g_type_to_name (gtype):
def g_type_to_name(gtype):
typenode = g_type_to_typenode(gtype) typenode = g_type_to_typenode(gtype)
if typenode != None: if typenode:
return g_quark_to_string (typenode["qname"]) return g_quark_to_string(typenode["qname"])
return None return None
def g_type_name_from_instance (instance):
def g_type_name_from_instance(instance):
if long(instance) != 0: if long(instance) != 0:
try: try:
inst = instance.cast (gdb.lookup_type("GTypeInstance").pointer()) inst = instance.cast(gdb.lookup_type("GTypeInstance").pointer())
klass = inst["g_class"] klass = inst["g_class"]
gtype = klass["g_type"] gtype = klass["g_type"]
name = g_type_to_name (gtype) name = g_type_to_name(gtype)
return name return name
except RuntimeError: except RuntimeError:
pass pass

View file

@ -92,8 +92,8 @@ class GstObjectPrettyPrinter:
GST_SECOND = 1000000000 GST_SECOND = 1000000000
GST_CLOCK_TIME_NONE = 2**64-1 GST_CLOCK_TIME_NONE = (2 ** 64) - 1
GST_CLOCK_STIME_NONE = -2**63 GST_CLOCK_STIME_NONE = -(2 ** 63)
def format_time(n, signed=False): def format_time(n, signed=False):
@ -361,8 +361,8 @@ class GdbGstCaps:
def items(self): def items(self):
gdb_type = gdb.lookup_type("GstCapsArrayElement") gdb_type = gdb.lookup_type("GstCapsArrayElement")
for f in _g_array_iter(self.val["array"], gdb_type): for f in _g_array_iter(self.val["array"], gdb_type):
yield(GdbCapsFeatures(f["features"]), yield (GdbCapsFeatures(f["features"]),
GdbGstStructure(f["structure"])) GdbGstStructure(f["structure"]))
def __eq__(self, other): def __eq__(self, other):
if self.size() != other.size(): if self.size() != other.size():
@ -401,7 +401,7 @@ class GdbGstCaps:
s += "(" + tmp + ")" s += "(" + tmp + ")"
_gdb_write(indent, s) _gdb_write(indent, s)
for val in structure.value_strings("%s: %s", False): for val in structure.value_strings("%s: %s", False):
_gdb_write(indent+1, val) _gdb_write(indent + 1, val)
return s return s
@ -438,7 +438,7 @@ class GdbGValue:
if step == 1: if step == 1:
v = "[ %d, %d ]" % (rmin, rmax) v = "[ %d, %d ]" % (rmin, rmax)
else: else:
v = "[ %d, %d, %d ]" % (rmin*step, rmax*step, step) v = "[ %d, %d, %d ]" % (rmin * step, rmax * step, step)
elif tname == "GstFractionRange": elif tname == "GstFractionRange":
v = "[ %s, %s ]" % (GdbGValue(value[0]), GdbGValue(value[1])) v = "[ %s, %s ]" % (GdbGValue(value[0]), GdbGValue(value[1]))
elif tname in ("GstValueList", "GstValueArray"): elif tname in ("GstValueList", "GstValueArray"):
@ -446,9 +446,9 @@ class GdbGValue:
gdb_type = gdb.lookup_type("GArray").pointer() gdb_type = gdb.lookup_type("GArray").pointer()
value = value[0]["v_pointer"].cast(gdb_type) value = value[0]["v_pointer"].cast(gdb_type)
v = "<" v = "<"
for l in _g_array_iter(value, gvalue_type): for array_val in _g_array_iter(value, gvalue_type):
v += " " if v == "<" else ", " v += " " if v == "<" else ", "
v += str(GdbGValue(l)) v += str(GdbGValue(array_val))
v += " >" v += " >"
elif tname in ("GEnum"): elif tname in ("GEnum"):
v = "%s(%s)" % ( v = "%s(%s)" % (
@ -490,7 +490,7 @@ class GdbGstStructure:
f = item[i] f = item[i]
key = g_quark_to_string(f["name"]) key = g_quark_to_string(f["name"])
value = GdbGValue(f["value"]) value = GdbGValue(f["value"])
yield(key, value) yield (key, value)
def value(self, key): def value(self, key):
for (k, value) in self.values(): for (k, value) in self.values():
@ -527,7 +527,7 @@ class GdbGstStructure:
else: else:
_gdb_write(indent, "%s:" % (self.name())) _gdb_write(indent, "%s:" % (self.name()))
for (key, value) in self.values(): for (key, value) in self.values():
_gdb_write(indent+1, "%s: %s" % (key, str(value))) _gdb_write(indent + 1, "%s: %s" % (key, str(value)))
class GdbGstSegment: class GdbGstSegment:
@ -545,7 +545,7 @@ class GdbGstSegment:
value = int(self.val[key]) value = int(self.val[key])
if skip is None or value != skip: if skip is None or value != skip:
_gdb_write(indent, "%s:%s %s" % _gdb_write(indent, "%s:%s %s" %
(key, (8-len(key))*" ", self.format_value(value))) (key, (8 - len(key)) * " ", self.format_value(value)))
def print(self, indent, seqnum=None): def print(self, indent, seqnum=None):
s = "segment:" s = "segment:"
@ -558,14 +558,14 @@ class GdbGstSegment:
applied = "(applied rate: %g)" % applied_rate applied = "(applied rate: %g)" % applied_rate
else: else:
applied = "" applied = ""
_gdb_write(indent+1, "rate: %g%s" % (rate, applied)) _gdb_write(indent + 1, "rate: %g%s" % (rate, applied))
self.print_optional(indent+1, "base", 0) self.print_optional(indent + 1, "base", 0)
self.print_optional(indent+1, "offset", 0) self.print_optional(indent + 1, "offset", 0)
self.print_optional(indent+1, "start") self.print_optional(indent + 1, "start")
self.print_optional(indent+1, "stop", GST_CLOCK_TIME_NONE) self.print_optional(indent + 1, "stop", GST_CLOCK_TIME_NONE)
self.print_optional(indent+1, "time") self.print_optional(indent + 1, "time")
self.print_optional(indent+1, "position") self.print_optional(indent + 1, "position")
self.print_optional(indent+1, "duration", GST_CLOCK_TIME_NONE) self.print_optional(indent + 1, "duration", GST_CLOCK_TIME_NONE)
class GdbGstEvent: class GdbGstEvent:
@ -596,7 +596,7 @@ class GdbGstEvent:
caps.print(indent, "caps (seqnum: %s):" % seqnum) caps.print(indent, "caps (seqnum: %s):" % seqnum)
elif typestr == "stream-start": elif typestr == "stream-start":
stream_id = self.structure().value("stream-id").value() stream_id = self.structure().value("stream-id").value()
_gdb_write(indent, "stream-start: (seqnum %s)" % seqnum) _gdb_write(indent, "stream-start: (seqnum %s)" % seqnum)
_gdb_write(indent + 1, "stream-id: %s" % stream_id.string()) _gdb_write(indent + 1, "stream-id: %s" % stream_id.string())
elif typestr == "segment": elif typestr == "segment":
segment = self.structure().value("segment").value() segment = self.structure().value("segment").value()
@ -610,7 +610,7 @@ class GdbGstEvent:
structure = GdbGstStructure(s) structure = GdbGstStructure(s)
_gdb_write(indent, "tag: %s (seqnum: %s)" % (name, seqnum)) _gdb_write(indent, "tag: %s (seqnum: %s)" % (name, seqnum))
for (key, value) in structure.values(): for (key, value) in structure.values():
_gdb_write(indent+1, "%s: %s" % (key, str(value))) _gdb_write(indent + 1, "%s: %s" % (key, str(value)))
else: else:
self.structure().print(indent, "%s (seqnum: %s)" % (typestr, seqnum)) self.structure().print(indent, "%s (seqnum: %s)" % (typestr, seqnum))
@ -623,7 +623,7 @@ class GdbGstBuffer:
value = int(self.val[key]) value = int(self.val[key])
if skip is None or value != skip: if skip is None or value != skip:
_gdb_write(indent, "%s:%s %s" % _gdb_write(indent, "%s:%s %s" %
(key, (8-len(key))*" ", format_func(value))) (key, (8 - len(key)) * " ", format_func(value)))
@save_memory_access_print("<inaccessible memory>") @save_memory_access_print("<inaccessible memory>")
def print(self, indent): def print(self, indent):
@ -647,8 +647,8 @@ class GdbGstBuffer:
_gdb_write(indent, "%s:" % meta_type_name) _gdb_write(indent, "%s:" % meta_type_name)
indent += 1 indent += 1
meta_info = str(meta.cast(gdb.lookup_type(meta_type_name))) meta_info = str(meta.cast(gdb.lookup_type(meta_type_name)))
for l in meta_info.split('\n'): for info in meta_info.split('\n'):
_gdb_write(indent, l) _gdb_write(indent, info)
indent -= 1 indent -= 1
meta_item = meta_item['next'] meta_item = meta_item['next']
else: else:
@ -770,30 +770,30 @@ class GdbGstPad(GdbGstObject):
first = True first = True
for ev in self.events(): for ev in self.events():
if first: if first:
_gdb_write(indent+1, "events:") _gdb_write(indent + 1, "events:")
first = False first = False
ev.print(indent+2) ev.print(indent + 2)
if self.is_linked(): if self.is_linked():
real = self.peer().parent_pad() real = self.peer().parent_pad()
_gdb_write(indent+1, "peer: %s" % _gdb_write(indent + 1, "peer: %s" %
(real.full_name() if real else self.peer().full_name())) (real.full_name() if real else self.peer().full_name()))
if g_inherits_type(self.val, "GstGhostPad"): if g_inherits_type(self.val, "GstGhostPad"):
t = gdb.lookup_type("GstProxyPad").pointer() t = gdb.lookup_type("GstProxyPad").pointer()
internal = GdbGstPad(self.val.cast(t)["priv"]["internal"]) internal = GdbGstPad(self.val.cast(t)["priv"]["internal"])
if internal and internal.peer(): if internal and internal.peer():
_gdb_write(indent+1, "inner peer: %s" % _gdb_write(indent + 1, "inner peer: %s" %
internal.peer().full_name()) internal.peer().full_name())
task = self.val["task"] task = self.val["task"]
if long(task) != 0: if long(task) != 0:
_gdb_write(indent+1, "task: %s" % _gdb_write(indent + 1, "task: %s" %
task_state_to_name(int(task["state"]))) task_state_to_name(int(task["state"])))
offset = long(self.val["offset"]) offset = long(self.val["offset"])
if offset != 0: if offset != 0:
_gdb_write(indent+1, "offset: %d [%s]" % _gdb_write(indent + 1, "offset: %d [%s]" %
(offset, format_time(offset, True))) (offset, format_time(offset, True)))
_gdb_write(indent, "}") _gdb_write(indent, "}")
@ -852,10 +852,10 @@ class GdbGstPad(GdbGstObject):
other_pname = other.dot_name() other_pname = other.dot_name()
if direction == "GST_PAD_SRC": if direction == "GST_PAD_SRC":
s += "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n" % \ s += "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n" % \
(spc, other_ename, other_pname, ename, pname) (spc, other_ename, other_pname, ename, pname)
else: else:
s += "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n" % \ s += "%s%s_%s -> %s_%s [style=dashed, minlen=0]\n" % \
(spc, ename, pname, other_ename, other_pname) (spc, ename, pname, other_ename, other_pname)
else: else:
if direction == "GST_PAD_SRC": if direction == "GST_PAD_SRC":
color = "#ffaaaa" color = "#ffaaaa"
@ -887,11 +887,11 @@ class GdbGstPad(GdbGstObject):
if caps and peer_caps and caps == peer_caps: if caps and peer_caps and caps == peer_caps:
s = "%s%s_%s -> %s_%s [label=\"%s\"]\n" % \ s = "%s%s_%s -> %s_%s [label=\"%s\"]\n" % \
(spc, ename, pname, peer_ename, peer_pname, caps.dot()) (spc, ename, pname, peer_ename, peer_pname, caps.dot())
elif caps and peer_caps and caps != peer_caps: elif caps and peer_caps and caps != peer_caps:
s = "%s%s_%s -> %s_%s [labeldistance=\"10\", labelangle=\"0\", " \ s = "%s%s_%s -> %s_%s [labeldistance=\"10\", labelangle=\"0\", " \
% (spc, ename, pname, peer_ename, peer_pname) % (spc, ename, pname, peer_ename, peer_pname)
s += "label=\"" + " "*50 + "\", " s += "label=\"" + " " * 50 + "\", "
if self.direction() == "GST_PAD_SRC": if self.direction() == "GST_PAD_SRC":
media_src = caps.dot() media_src = caps.dot()
media_dst = peer_caps.dot() media_dst = peer_caps.dot()
@ -948,14 +948,14 @@ class GdbGstElement(GdbGstObject):
_gdb_write(indent, "%s(%s) {" % _gdb_write(indent, "%s(%s) {" %
(g_type_name_from_instance(self.val), self.name())) (g_type_name_from_instance(self.val), self.name()))
for p in self.pads(): for p in self.pads():
p.print(indent+2) p.print(indent + 2)
first = True first = True
for child in self.children(): for child in self.children():
if first: if first:
_gdb_write(indent+2, "children:") _gdb_write(indent + 2, "children:")
first = False first = False
_gdb_write(indent+3, child.name()) _gdb_write(indent + 3, child.name())
current_state = self.val["current_state"] current_state = self.val["current_state"]
s = "state: %s" % element_state_to_name(current_state) s = "state: %s" % element_state_to_name(current_state)
@ -963,11 +963,11 @@ class GdbGstElement(GdbGstObject):
state = self.val[var + "_state"] state = self.val[var + "_state"]
if state > 0 and state != current_state: if state > 0 and state != current_state:
s += ", %s: %s" % (var, element_state_to_name(state)) s += ", %s: %s" % (var, element_state_to_name(state))
_gdb_write(indent+2, s) _gdb_write(indent + 2, s)
_gdb_write(indent+2, "base_time: %s" % _gdb_write(indent + 2, "base_time: %s" %
format_time_value(self.val["base_time"])) format_time_value(self.val["base_time"]))
_gdb_write(indent+2, "start_time: %s" % _gdb_write(indent + 2, "start_time: %s" %
format_time_value(self.val["start_time"])) format_time_value(self.val["start_time"]))
_gdb_write(indent, "}") _gdb_write(indent, "}")
@ -976,7 +976,7 @@ class GdbGstElement(GdbGstObject):
def print_tree(self, indent): def print_tree(self, indent):
_gdb_write(indent, "%s(%s)" % (self.name(), self.val)) _gdb_write(indent, "%s(%s)" % (self.name(), self.val))
for child in self.children(): for child in self.children():
child.print_tree(indent+1) child.print_tree(indent + 1)
def _dot(self, indent=0): def _dot(self, indent=0):
spc = " " * indent spc = " " * indent
@ -992,12 +992,12 @@ class GdbGstElement(GdbGstObject):
sink_name = None sink_name = None
if self.has_pads("sinkpads"): if self.has_pads("sinkpads"):
(ss, sink_name) = self._dot_pads(indent+1, "sinkpads", (ss, sink_name) = self._dot_pads(indent + 1, "sinkpads",
self.dot_name() + "_sink") self.dot_name() + "_sink")
s += ss s += ss
src_name = None src_name = None
if self.has_pads("srcpads"): if self.has_pads("srcpads"):
(ss, src_name) = self._dot_pads(indent+1, "srcpads", (ss, src_name) = self._dot_pads(indent + 1, "srcpads",
self.dot_name() + "_src") self.dot_name() + "_src")
s += ss s += ss
if sink_name and src_name: if sink_name and src_name:
@ -1007,7 +1007,7 @@ class GdbGstElement(GdbGstObject):
if gst_is_bin(self.val): if gst_is_bin(self.val):
s += "%s fillcolor=\"#ffffff\";\n" % spc s += "%s fillcolor=\"#ffffff\";\n" % spc
s += self.dot(indent+1) s += self.dot(indent + 1)
else: else:
if src_name and not sink_name: if src_name and not sink_name:
s += "%s fillcolor=\"#ffaaaa\";\n" % spc s += "%s fillcolor=\"#ffaaaa\";\n" % spc
@ -1042,7 +1042,7 @@ class GdbGstElement(GdbGstObject):
if not name: if not name:
name = p.dot_name() name = p.dot_name()
s += "%s}\n\n" % spc s += "%s}\n\n" % spc
return(s, name) return (s, name)
def dot(self, indent): def dot(self, indent):
s = "" s = ""
@ -1097,6 +1097,7 @@ GST_DEBUG_BIN_TO_DOT_FILE. This command will find the top-level parent
for the given gstreamer object and create the dot for that element. for the given gstreamer object and create the dot for that element.
Usage: gst-dot <gst-object> <file-name>""" Usage: gst-dot <gst-object> <file-name>"""
def __init__(self): def __init__(self):
super(GstDot, self).__init__("gst-dot", gdb.COMMAND_DATA) super(GstDot, self).__init__("gst-dot", gdb.COMMAND_DATA)
@ -1120,7 +1121,7 @@ Usage: gst-dot <gst-object> <file-name>"""
def complete(self, text, word): def complete(self, text, word):
cmd = gdb.string_to_argv(text) cmd = gdb.string_to_argv(text)
if len(cmd) == 0 or(len(cmd) == 1 and len(word) > 0): if len(cmd) == 0 or (len(cmd) == 1 and len(word) > 0):
return gdb.COMPLETE_SYMBOL return gdb.COMPLETE_SYMBOL
return gdb.COMPLETE_FILENAME return gdb.COMPLETE_FILENAME
@ -1130,6 +1131,7 @@ class GstPrint(gdb.Command):
Print high-level information for GStreamer objects Print high-level information for GStreamer objects
Usage gst-print <gstreamer-object>""" Usage gst-print <gstreamer-object>"""
def __init__(self): def __init__(self):
super(GstPrint, self).__init__("gst-print", gdb.COMMAND_DATA, super(GstPrint, self).__init__("gst-print", gdb.COMMAND_DATA,
gdb.COMPLETE_SYMBOL) gdb.COMPLETE_SYMBOL)
@ -1165,6 +1167,7 @@ Usage gst-print <gstreamer-object>"""
class GstPipelineTree(gdb.Command): class GstPipelineTree(gdb.Command):
"""\ """\
Usage: gst-pipeline-tree <gst-object>""" Usage: gst-pipeline-tree <gst-object>"""
def __init__(self): def __init__(self):
super(GstPipelineTree, self).__init__("gst-pipeline-tree", super(GstPipelineTree, self).__init__("gst-pipeline-tree",
gdb.COMPLETE_SYMBOL) gdb.COMPLETE_SYMBOL)