Next: , Previous: , Up: Python API   [Contents][Index]


24.3.2.2 Exception Handling

When executing the python command, Python exceptions uncaught within the Python code are translated to calls to ROCGDB error-reporting mechanism. If the command that called python does not handle the error, ROCGDB will terminate it and print an error message containing the Python exception name, the associated value, and the Python call stack backtrace at the point where the exception was raised. Example:

(gdb) python print foo
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'foo' is not defined

ROCGDB errors that happen in ROCGDB commands invoked by Python code are converted to Python exceptions. The type of the Python exception depends on the error.

gdb.error

This is the base class for most exceptions generated by ROCGDB. It is derived from RuntimeError, for compatibility with earlier versions of ROCGDB.

If an error occurring in ROCGDB does not fit into some more specific category, then the generated exception will have this type.

gdb.MemoryError

This is a subclass of gdb.error which is thrown when an operation tried to access invalid memory in the inferior.

KeyboardInterrupt

User interrupt (via C-c or by typing q at a pagination prompt) is translated to a Python KeyboardInterrupt exception.

In all cases, your exception handler will see the ROCGDB error message as its value and the Python call stack backtrace at the Python statement closest to where the ROCGDB error occured as the traceback.

When implementing ROCGDB commands in Python via gdb.Command, or functions via gdb.Function, it is useful to be able to throw an exception that doesn’t cause a traceback to be printed. For example, the user may have invoked the command incorrectly. ROCGDB provides a special exception class that can be used for this purpose.

gdb.GdbError

When thrown from a command or function, this exception will cause the command or function to fail, but the Python stack will not be displayed. ROCGDB does not throw this exception itself, but rather recognizes it when thrown from user Python code. Example:

(gdb) python
>class HelloWorld (gdb.Command):
>  """Greet the whole world."""
>  def __init__ (self):
>    super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_USER)
>  def invoke (self, args, from_tty):
>    argv = gdb.string_to_argv (args)
>    if len (argv) != 0:
>      raise gdb.GdbError ("hello-world takes no arguments")
>    print ("Hello, World!")
>HelloWorld ()
>end
(gdb) hello-world 42
hello-world takes no arguments

Next: Values From Inferior, Previous: Basic Python, Up: Python API   [Contents][Index]