hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2021 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." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Exception Handling</title>
 
<meta name="description" content="Debugging with GDB: Exception Handling">
<meta name="keywords" content="Debugging with GDB: Exception Handling">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Python-API.html#Python-API" rel="up" title="Python API">
<link href="Values-From-Inferior.html#Values-From-Inferior" rel="next" title="Values From Inferior">
<link href="Basic-Python.html#Basic-Python" rel="previous" title="Basic Python">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Exception-Handling"></a>
<div class="header">
<p>
Next: <a href="Values-From-Inferior.html#Values-From-Inferior" accesskey="n" rel="next">Values From Inferior</a>, Previous: <a href="Basic-Python.html#Basic-Python" accesskey="p" rel="previous">Basic 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>
</div>
<hr>
<a name="Exception-Handling-1"></a>
<h4 class="subsubsection">23.2.2.2 Exception Handling</h4>
<a name="index-python-exceptions"></a>
<a name="index-exceptions_002c-python"></a>
 
<p>When executing the <code>python</code> command, Python exceptions
uncaught within the Python code are translated to calls to
<small>GDB</small> error-reporting mechanism.  If the command that called
<code>python</code> does not handle the error, <small>GDB</small> 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:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) python print foo
Traceback (most recent call last):
  File &quot;&lt;string&gt;&quot;, line 1, in &lt;module&gt;
NameError: name 'foo' is not defined
</pre></div>
 
<p><small>GDB</small> errors that happen in <small>GDB</small> commands invoked by
Python code are converted to Python exceptions.  The type of the
Python exception depends on the error.
</p>
<dl compact="compact">
<dt><code>gdb.error</code>
<a name="index-gdb_002eerror"></a>
</dt>
<dd><p>This is the base class for most exceptions generated by <small>GDB</small>.
It is derived from <code>RuntimeError</code>, for compatibility with earlier
versions of <small>GDB</small>.
</p>
<p>If an error occurring in <small>GDB</small> does not fit into some more
specific category, then the generated exception will have this type.
</p>
</dd>
<dt><code>gdb.MemoryError</code>
<a name="index-gdb_002eMemoryError"></a>
</dt>
<dd><p>This is a subclass of <code>gdb.error</code> which is thrown when an
operation tried to access invalid memory in the inferior.
</p>
</dd>
<dt><code>KeyboardInterrupt</code>
<a name="index-KeyboardInterrupt"></a>
</dt>
<dd><p>User interrupt (via <kbd>C-c</kbd> or by typing <kbd>q</kbd> at a pagination
prompt) is translated to a Python <code>KeyboardInterrupt</code> exception.
</p></dd>
</dl>
 
<p>In all cases, your exception handler will see the <small>GDB</small> error
message as its value and the Python call stack backtrace at the Python
statement closest to where the <small>GDB</small> error occured as the
traceback.
</p>
 
<p>When implementing <small>GDB</small> commands in Python via
<code>gdb.Command</code>, or functions via <code>gdb.Function</code>, it is useful
to be able to throw an exception that doesn&rsquo;t cause a traceback to be
printed.  For example, the user may have invoked the command
incorrectly.  <small>GDB</small> provides a special exception class that can
be used for this purpose.
</p>
<dl compact="compact">
<dt><code>gdb.GdbError</code>
<a name="index-gdb_002eGdbError"></a>
</dt>
<dd><p>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.  <small>GDB</small> does not throw this exception itself, but
rather recognizes it when thrown from user Python code.  Example:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb) python
&gt;class HelloWorld (gdb.Command):
&gt;  &quot;&quot;&quot;Greet the whole world.&quot;&quot;&quot;
&gt;  def __init__ (self):
&gt;    super (HelloWorld, self).__init__ (&quot;hello-world&quot;, gdb.COMMAND_USER)
&gt;  def invoke (self, args, from_tty):
&gt;    argv = gdb.string_to_argv (args)
&gt;    if len (argv) != 0:
&gt;      raise gdb.GdbError (&quot;hello-world takes no arguments&quot;)
&gt;    print &quot;Hello, World!&quot;
&gt;HelloWorld ()
&gt;end
(gdb) hello-world 42
hello-world takes no arguments
</pre></div>
</dd>
</dl>
 
<hr>
<div class="header">
<p>
Next: <a href="Values-From-Inferior.html#Values-From-Inferior" accesskey="n" rel="next">Values From Inferior</a>, Previous: <a href="Basic-Python.html#Basic-Python" accesskey="p" rel="previous">Basic 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>
</div>
 
 
 
</body>
</html>