You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Parameters-In-Python.html 14KB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Free Software" and "Free Software Needs
  8. Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
  9. and with the Back-Cover Texts as in (a) below.
  10. (a) The FSF's Back-Cover Text is: "You are free to copy and modify
  11. this GNU Manual. Buying copies from GNU Press supports the FSF in
  12. developing GNU and promoting software freedom." -->
  13. <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  16. <title>Parameters In Python (Debugging with GDB)</title>
  17. <meta name="description" content="Parameters In Python (Debugging with GDB)">
  18. <meta name="keywords" content="Parameters In Python (Debugging with GDB)">
  19. <meta name="resource-type" content="document">
  20. <meta name="distribution" content="global">
  21. <meta name="Generator" content="makeinfo">
  22. <link href="index.html#Top" rel="start" title="Top">
  23. <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
  24. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  25. <link href="Python-API.html#Python-API" rel="up" title="Python API">
  26. <link href="Functions-In-Python.html#Functions-In-Python" rel="next" title="Functions In Python">
  27. <link href="Commands-In-Python.html#Commands-In-Python" rel="prev" title="Commands In Python">
  28. <style type="text/css">
  29. <!--
  30. a.summary-letter {text-decoration: none}
  31. blockquote.indentedblock {margin-right: 0em}
  32. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  33. blockquote.smallquotation {font-size: smaller}
  34. div.display {margin-left: 3.2em}
  35. div.example {margin-left: 3.2em}
  36. div.lisp {margin-left: 3.2em}
  37. div.smalldisplay {margin-left: 3.2em}
  38. div.smallexample {margin-left: 3.2em}
  39. div.smalllisp {margin-left: 3.2em}
  40. kbd {font-style: oblique}
  41. pre.display {font-family: inherit}
  42. pre.format {font-family: inherit}
  43. pre.menu-comment {font-family: serif}
  44. pre.menu-preformatted {font-family: serif}
  45. pre.smalldisplay {font-family: inherit; font-size: smaller}
  46. pre.smallexample {font-size: smaller}
  47. pre.smallformat {font-family: inherit; font-size: smaller}
  48. pre.smalllisp {font-size: smaller}
  49. span.nolinebreak {white-space: nowrap}
  50. span.roman {font-family: initial; font-weight: normal}
  51. span.sansserif {font-family: sans-serif; font-weight: normal}
  52. ul.no-bullet {list-style: none}
  53. -->
  54. </style>
  55. </head>
  56. <body lang="en">
  57. <a name="Parameters-In-Python"></a>
  58. <div class="header">
  59. <p>
  60. Next: <a href="Functions-In-Python.html#Functions-In-Python" accesskey="n" rel="next">Functions In Python</a>, Previous: <a href="Commands-In-Python.html#Commands-In-Python" accesskey="p" rel="prev">Commands In Python</a>, Up: <a href="Python-API.html#Python-API" accesskey="u" rel="up">Python API</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
  61. </div>
  62. <hr>
  63. <a name="Parameters-In-Python-1"></a>
  64. <h4 class="subsubsection">23.2.2.21 Parameters In Python</h4>
  65. <a name="index-parameters-in-python"></a>
  66. <a name="index-python-parameters"></a>
  67. <a name="index-gdb_002eParameter"></a>
  68. <a name="index-Parameter"></a>
  69. <p>You can implement new <small>GDB</small> parameters using Python. A new
  70. parameter is implemented as an instance of the <code>gdb.Parameter</code>
  71. class.
  72. </p>
  73. <p>Parameters are exposed to the user via the <code>set</code> and
  74. <code>show</code> commands. See <a href="Help.html#Help">Help</a>.
  75. </p>
  76. <p>There are many parameters that already exist and can be set in
  77. <small>GDB</small>. Two examples are: <code>set follow fork</code> and
  78. <code>set charset</code>. Setting these parameters influences certain
  79. behavior in <small>GDB</small>. Similarly, you can define parameters that
  80. can be used to influence behavior in custom Python scripts and commands.
  81. </p>
  82. <dl>
  83. <dt><a name="index-Parameter_002e_005f_005finit_005f_005f"></a>Function: <strong>Parameter.__init__</strong> <em>(name, <var>command-class</var>, <var>parameter-class</var> <span class="roman">[</span>, <var>enum-sequence</var><span class="roman">]</span>)</em></dt>
  84. <dd><p>The object initializer for <code>Parameter</code> registers the new
  85. parameter with <small>GDB</small>. This initializer is normally invoked
  86. from the subclass&rsquo; own <code>__init__</code> method.
  87. </p>
  88. <p><var>name</var> is the name of the new parameter. If <var>name</var> consists
  89. of multiple words, then the initial words are looked for as prefix
  90. parameters. An example of this can be illustrated with the
  91. <code>set print</code> set of parameters. If <var>name</var> is
  92. <code>print foo</code>, then <code>print</code> will be searched as the prefix
  93. parameter. In this case the parameter can subsequently be accessed in
  94. <small>GDB</small> as <code>set print foo</code>.
  95. </p>
  96. <p>If <var>name</var> consists of multiple words, and no prefix parameter group
  97. can be found, an exception is raised.
  98. </p>
  99. <p><var>command-class</var> should be one of the &lsquo;<samp>COMMAND_</samp>&rsquo; constants
  100. (see <a href="Commands-In-Python.html#Commands-In-Python">Commands In Python</a>). This argument tells <small>GDB</small> how to
  101. categorize the new parameter in the help system.
  102. </p>
  103. <p><var>parameter-class</var> should be one of the &lsquo;<samp>PARAM_</samp>&rsquo; constants
  104. defined below. This argument tells <small>GDB</small> the type of the new
  105. parameter; this information is used for input validation and
  106. completion.
  107. </p>
  108. <p>If <var>parameter-class</var> is <code>PARAM_ENUM</code>, then
  109. <var>enum-sequence</var> must be a sequence of strings. These strings
  110. represent the possible values for the parameter.
  111. </p>
  112. <p>If <var>parameter-class</var> is not <code>PARAM_ENUM</code>, then the presence
  113. of a fourth argument will cause an exception to be thrown.
  114. </p>
  115. <p>The help text for the new parameter is taken from the Python
  116. documentation string for the parameter&rsquo;s class, if there is one. If
  117. there is no documentation string, a default value is used.
  118. </p></dd></dl>
  119. <dl>
  120. <dt><a name="index-Parameter_002eset_005fdoc"></a>Variable: <strong>Parameter.set_doc</strong></dt>
  121. <dd><p>If this attribute exists, and is a string, then its value is used as
  122. the help text for this parameter&rsquo;s <code>set</code> command. The value is
  123. examined when <code>Parameter.__init__</code> is invoked; subsequent changes
  124. have no effect.
  125. </p></dd></dl>
  126. <dl>
  127. <dt><a name="index-Parameter_002eshow_005fdoc"></a>Variable: <strong>Parameter.show_doc</strong></dt>
  128. <dd><p>If this attribute exists, and is a string, then its value is used as
  129. the help text for this parameter&rsquo;s <code>show</code> command. The value is
  130. examined when <code>Parameter.__init__</code> is invoked; subsequent changes
  131. have no effect.
  132. </p></dd></dl>
  133. <dl>
  134. <dt><a name="index-Parameter_002evalue"></a>Variable: <strong>Parameter.value</strong></dt>
  135. <dd><p>The <code>value</code> attribute holds the underlying value of the
  136. parameter. It can be read and assigned to just as any other
  137. attribute. <small>GDB</small> does validation when assignments are made.
  138. </p></dd></dl>
  139. <p>There are two methods that may be implemented in any <code>Parameter</code>
  140. class. These are:
  141. </p>
  142. <dl>
  143. <dt><a name="index-Parameter_002eget_005fset_005fstring"></a>Function: <strong>Parameter.get_set_string</strong> <em>(self)</em></dt>
  144. <dd><p>If this method exists, <small>GDB</small> will call it when a
  145. <var>parameter</var>&rsquo;s value has been changed via the <code>set</code> API (for
  146. example, <kbd>set foo off</kbd>). The <code>value</code> attribute has already
  147. been populated with the new value and may be used in output. This
  148. method must return a string. If the returned string is not empty,
  149. <small>GDB</small> will present it to the user.
  150. </p>
  151. <p>If this method raises the <code>gdb.GdbError</code> exception
  152. (see <a href="Exception-Handling.html#Exception-Handling">Exception Handling</a>), then <small>GDB</small> will print the
  153. exception&rsquo;s string and the <code>set</code> command will fail. Note,
  154. however, that the <code>value</code> attribute will not be reset in this
  155. case. So, if your parameter must validate values, it should store the
  156. old value internally and reset the exposed value, like so:
  157. </p>
  158. <div class="smallexample">
  159. <pre class="smallexample">class ExampleParam (gdb.Parameter):
  160. def __init__ (self, name):
  161. super (ExampleParam, self).__init__ (name,
  162. gdb.COMMAND_DATA,
  163. gdb.PARAM_BOOLEAN)
  164. self.value = True
  165. self.saved_value = True
  166. def validate(self):
  167. return False
  168. def get_set_string (self):
  169. if not self.validate():
  170. self.value = self.saved_value
  171. raise gdb.GdbError('Failed to validate')
  172. self.saved_value = self.value
  173. </pre></div>
  174. </dd></dl>
  175. <dl>
  176. <dt><a name="index-Parameter_002eget_005fshow_005fstring"></a>Function: <strong>Parameter.get_show_string</strong> <em>(self, svalue)</em></dt>
  177. <dd><p><small>GDB</small> will call this method when a <var>parameter</var>&rsquo;s
  178. <code>show</code> API has been invoked (for example, <kbd>show foo</kbd>). The
  179. argument <code>svalue</code> receives the string representation of the
  180. current value. This method must return a string.
  181. </p></dd></dl>
  182. <p>When a new parameter is defined, its type must be specified. The
  183. available types are represented by constants defined in the <code>gdb</code>
  184. module:
  185. </p>
  186. <dl compact="compact">
  187. <dd><a name="index-PARAM_005fBOOLEAN"></a>
  188. <a name="index-gdb_002ePARAM_005fBOOLEAN"></a>
  189. </dd>
  190. <dt><code>gdb.PARAM_BOOLEAN</code></dt>
  191. <dd><p>The value is a plain boolean. The Python boolean values, <code>True</code>
  192. and <code>False</code> are the only valid values.
  193. </p>
  194. <a name="index-PARAM_005fAUTO_005fBOOLEAN"></a>
  195. <a name="index-gdb_002ePARAM_005fAUTO_005fBOOLEAN"></a>
  196. </dd>
  197. <dt><code>gdb.PARAM_AUTO_BOOLEAN</code></dt>
  198. <dd><p>The value has three possible states: true, false, and &lsquo;<samp>auto</samp>&rsquo;. In
  199. Python, true and false are represented using boolean constants, and
  200. &lsquo;<samp>auto</samp>&rsquo; is represented using <code>None</code>.
  201. </p>
  202. <a name="index-PARAM_005fUINTEGER"></a>
  203. <a name="index-gdb_002ePARAM_005fUINTEGER"></a>
  204. </dd>
  205. <dt><code>gdb.PARAM_UINTEGER</code></dt>
  206. <dd><p>The value is an unsigned integer. The value of 0 should be
  207. interpreted to mean &ldquo;unlimited&rdquo;.
  208. </p>
  209. <a name="index-PARAM_005fINTEGER"></a>
  210. <a name="index-gdb_002ePARAM_005fINTEGER"></a>
  211. </dd>
  212. <dt><code>gdb.PARAM_INTEGER</code></dt>
  213. <dd><p>The value is a signed integer. The value of 0 should be interpreted
  214. to mean &ldquo;unlimited&rdquo;.
  215. </p>
  216. <a name="index-PARAM_005fSTRING"></a>
  217. <a name="index-gdb_002ePARAM_005fSTRING"></a>
  218. </dd>
  219. <dt><code>gdb.PARAM_STRING</code></dt>
  220. <dd><p>The value is a string. When the user modifies the string, any escape
  221. sequences, such as &lsquo;<samp>\t</samp>&rsquo;, &lsquo;<samp>\f</samp>&rsquo;, and octal escapes, are
  222. translated into corresponding characters and encoded into the current
  223. host charset.
  224. </p>
  225. <a name="index-PARAM_005fSTRING_005fNOESCAPE"></a>
  226. <a name="index-gdb_002ePARAM_005fSTRING_005fNOESCAPE"></a>
  227. </dd>
  228. <dt><code>gdb.PARAM_STRING_NOESCAPE</code></dt>
  229. <dd><p>The value is a string. When the user modifies the string, escapes are
  230. passed through untranslated.
  231. </p>
  232. <a name="index-PARAM_005fOPTIONAL_005fFILENAME"></a>
  233. <a name="index-gdb_002ePARAM_005fOPTIONAL_005fFILENAME"></a>
  234. </dd>
  235. <dt><code>gdb.PARAM_OPTIONAL_FILENAME</code></dt>
  236. <dd><p>The value is a either a filename (a string), or <code>None</code>.
  237. </p>
  238. <a name="index-PARAM_005fFILENAME"></a>
  239. <a name="index-gdb_002ePARAM_005fFILENAME"></a>
  240. </dd>
  241. <dt><code>gdb.PARAM_FILENAME</code></dt>
  242. <dd><p>The value is a filename. This is just like
  243. <code>PARAM_STRING_NOESCAPE</code>, but uses file names for completion.
  244. </p>
  245. <a name="index-PARAM_005fZINTEGER"></a>
  246. <a name="index-gdb_002ePARAM_005fZINTEGER"></a>
  247. </dd>
  248. <dt><code>gdb.PARAM_ZINTEGER</code></dt>
  249. <dd><p>The value is an integer. This is like <code>PARAM_INTEGER</code>, except 0
  250. is interpreted as itself.
  251. </p>
  252. <a name="index-PARAM_005fZUINTEGER"></a>
  253. <a name="index-gdb_002ePARAM_005fZUINTEGER"></a>
  254. </dd>
  255. <dt><code>gdb.PARAM_ZUINTEGER</code></dt>
  256. <dd><p>The value is an unsigned integer. This is like <code>PARAM_INTEGER</code>,
  257. except 0 is interpreted as itself, and the value cannot be negative.
  258. </p>
  259. <a name="index-PARAM_005fZUINTEGER_005fUNLIMITED"></a>
  260. <a name="index-gdb_002ePARAM_005fZUINTEGER_005fUNLIMITED"></a>
  261. </dd>
  262. <dt><code>gdb.PARAM_ZUINTEGER_UNLIMITED</code></dt>
  263. <dd><p>The value is a signed integer. This is like <code>PARAM_ZUINTEGER</code>,
  264. except the special value -1 should be interpreted to mean
  265. &ldquo;unlimited&rdquo;. Other negative values are not allowed.
  266. </p>
  267. <a name="index-PARAM_005fENUM"></a>
  268. <a name="index-gdb_002ePARAM_005fENUM"></a>
  269. </dd>
  270. <dt><code>gdb.PARAM_ENUM</code></dt>
  271. <dd><p>The value is a string, which must be one of a collection string
  272. constants provided when the parameter is created.
  273. </p></dd>
  274. </dl>
  275. <hr>
  276. <div class="header">
  277. <p>
  278. Next: <a href="Functions-In-Python.html#Functions-In-Python" accesskey="n" rel="next">Functions In Python</a>, Previous: <a href="Commands-In-Python.html#Commands-In-Python" accesskey="p" rel="prev">Commands In Python</a>, Up: <a href="Python-API.html#Python-API" accesskey="u" rel="up">Python API</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
  279. </div>
  280. </body>
  281. </html>