Skip to content
Advertisement

unable to source user defined python gdb command

I’ve been following this amazing (video) tutorial to create custom user defined GDB command using python

here is my code

import os
import gdb

class BugReport (gdb.Command):
    """Collect required info for a bug report"""

def __init__(self):
    super(BugReport, self).__init__("bugreport", gdb.COMMAND_USER)

def invoke(self, arg, from_tty):
    pagination = gdb.parameter("pagination")
    if pagination: gdb.execute("set pagination off")
    f = open("/tmp/bugreport.txt", "w")
    f.write(gdb.execute("thread apply all backtrace full", to_string=True))
    f.close()
    os.system("uname -a >> /tmp/bugreport.txt")
    if pagination: gdb.execute("set pagination on")

BugReport()

but when I try to source this code inside gdb I get following error:

(gdb) source mybugreport.py
Traceback (most recent call last):
  File "mybugreport.py", line 19, in <module>
    BugReport()
TypeError: function missing required argument 'name' (pos 1)

what I’m doing wrong?

Advertisement

Answer

what I’m doing wrong?

Python is indentation-sensitive. You want:

class BugReport (gdb.Command):
  """Collect required info for a bug report"""

  def __init__(self):
    super(BugReport, self).__init__("bugreport", gdb.COMMAND_USER)

  def invoke(self, arg, from_tty):
    pagination = gdb.parameter("pagination")
    ...

BugReport()
Advertisement