| <html lang="en"> |
| <head> |
| <title>Functions In Python - Debugging with GDB</title> |
| <meta http-equiv="Content-Type" content="text/html"> |
| <meta name="description" content="Debugging with GDB"> |
| <meta name="generator" content="makeinfo 4.13"> |
| <link title="Top" rel="start" href="index.html#Top"> |
| <link rel="up" href="Python-API.html#Python-API" title="Python API"> |
| <link rel="prev" href="Parameters-In-Python.html#Parameters-In-Python" title="Parameters In Python"> |
| <link rel="next" href="Progspaces-In-Python.html#Progspaces-In-Python" title="Progspaces In Python"> |
| <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> |
| <!-- |
| Copyright (C) 1988-2019 Free Software Foundation, Inc. |
| |
| Permission is granted to copy, distribute and/or modify this document |
| under the terms of the GNU Free Documentation License, Version 1.3 or |
| any later version published by the Free Software Foundation; with the |
| Invariant Sections being ``Free Software'' and ``Free Software Needs |
| Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,'' |
| and with the Back-Cover Texts as in (a) below. |
| |
| (a) The FSF's Back-Cover Text is: ``You are free to copy and modify |
| this GNU Manual. Buying copies from GNU Press supports the FSF in |
| developing GNU and promoting software freedom.'' |
| --> |
| <meta http-equiv="Content-Style-Type" content="text/css"> |
| <style type="text/css"><!-- |
| pre.display { font-family:inherit } |
| pre.format { font-family:inherit } |
| pre.smalldisplay { font-family:inherit; font-size:smaller } |
| pre.smallformat { font-family:inherit; font-size:smaller } |
| pre.smallexample { font-size:smaller } |
| pre.smalllisp { font-size:smaller } |
| span.sc { font-variant:small-caps } |
| span.roman { font-family:serif; font-weight:normal; } |
| span.sansserif { font-family:sans-serif; font-weight:normal; } |
| --></style> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="Functions-In-Python"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="Progspaces-In-Python.html#Progspaces-In-Python">Progspaces In Python</a>, |
| Previous: <a rel="previous" accesskey="p" href="Parameters-In-Python.html#Parameters-In-Python">Parameters In Python</a>, |
| Up: <a rel="up" accesskey="u" href="Python-API.html#Python-API">Python API</a> |
| <hr> |
| </div> |
| |
| <h5 class="subsubsection">23.2.2.22 Writing new convenience functions</h5> |
| |
| <p><a name="index-writing-convenience-functions-2217"></a><a name="index-convenience-functions-in-python-2218"></a><a name="index-python-convenience-functions-2219"></a><a name="index-gdb_002eFunction-2220"></a><a name="index-Function-2221"></a>You can implement new convenience functions (see <a href="Convenience-Vars.html#Convenience-Vars">Convenience Vars</a>) |
| in Python. A convenience function is an instance of a subclass of the |
| class <code>gdb.Function</code>. |
| |
| <div class="defun"> |
| — Function: <b>Function.__init__</b> (<var>name</var>)<var><a name="index-Function_002e_005f_005finit_005f_005f-2222"></a></var><br> |
| <blockquote><p>The initializer for <code>Function</code> registers the new function with |
| <span class="sc">gdb</span>. The argument <var>name</var> is the name of the function, |
| a string. The function will be visible to the user as a convenience |
| variable of type <code>internal function</code>, whose name is the same as |
| the given <var>name</var>. |
| |
| <p>The documentation for the new function is taken from the documentation |
| string for the new class. |
| </p></blockquote></div> |
| |
| <div class="defun"> |
| — Function: <b>Function.invoke</b> (<var>*args</var>)<var><a name="index-Function_002einvoke-2223"></a></var><br> |
| <blockquote><p>When a convenience function is evaluated, its arguments are converted |
| to instances of <code>gdb.Value</code>, and then the function's |
| <code>invoke</code> method is called. Note that <span class="sc">gdb</span> does not |
| predetermine the arity of convenience functions. Instead, all |
| available arguments are passed to <code>invoke</code>, following the |
| standard Python calling convention. In particular, a convenience |
| function can have default values for parameters without ill effect. |
| |
| <p>The return value of this method is used as its value in the enclosing |
| expression. If an ordinary Python value is returned, it is converted |
| to a <code>gdb.Value</code> following the usual rules. |
| </p></blockquote></div> |
| |
| <p>The following code snippet shows how a trivial convenience function can |
| be implemented in Python: |
| |
| <pre class="smallexample"> class Greet (gdb.Function): |
| """Return string to greet someone. |
| Takes a name as argument.""" |
| |
| def __init__ (self): |
| super (Greet, self).__init__ ("greet") |
| |
| def invoke (self, name): |
| return "Hello, %s!" % name.string () |
| |
| Greet () |
| </pre> |
| <p>The last line instantiates the class, and is necessary to trigger the |
| registration of the function with <span class="sc">gdb</span>. Depending on how the |
| Python code is read into <span class="sc">gdb</span>, you may need to import the |
| <code>gdb</code> module explicitly. |
| |
| <p>Now you can use the function in an expression: |
| |
| <pre class="smallexample"> (gdb) print $greet("Bob") |
| $1 = "Hello, Bob!" |
| </pre> |
| </body></html> |
| |