docs/source/guides/writer/libs/gdb.rst
avocado.utils.gdb
=================
The :mod:`avocado.utils.gdb` APIs that allows a test to interact with
GDB, including setting a executable to be run, setting breakpoints
or any other types of commands. This requires a test written with
that approach and API in mind.
APIs
----
Avocado's GDB module, provides three main classes that lets a test writer
interact with a `gdb` process, a `gdbserver` process and also use the GDB
remote protocol for interaction with a remote target.
Please refer to :mod:`avocado.utils.gdb` for more information.
Example
~~~~~~~
Take a look at ``examples/tests/modify_variable.py`` test::
def test(self):
"""
Execute 'print_variable'.
"""
path = os.path.join(self.workdir, 'print_variable')
app = gdb.GDB()
app.set_file(path)
app.set_break(6)
app.run()
self.log.info("\n".join(app.read_until_break()))
app.cmd("set variable a = 0xff")
app.cmd("c")
out = "\n".join(app.read_until_break())
self.log.info(out)
app.exit()
self.assertIn("MY VARIABLE 'A' IS: ff", out)
This allows us to automate the interaction with the GDB in means of
setting breakpoints, executing commands and querying for output.
When you check the output (``--show=test``) you can see that despite
declaring the variable as 0, ff is injected and printed instead.