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
<!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: In-process Agent</title>
 
<meta name="description" content="Debugging with GDB: In-process Agent">
<meta name="keywords" content="Debugging with GDB: In-process Agent">
<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="index.html#Top" rel="up" title="Top">
<link href="In_002dprocess-Agent-Protocol.html#In_002dprocess-Agent-Protocol" rel="next" title="In-process Agent Protocol">
<link href="Writing-JIT-Debug-Info-Readers.html#Writing-JIT-Debug-Info-Readers" rel="previous" title="Writing JIT Debug Info Readers">
<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="In_002dprocess-Agent"></a>
<div class="header">
<p>
Next: <a href="GDB-Bugs.html#GDB-Bugs" accesskey="n" rel="next">GDB Bugs</a>, Previous: <a href="JIT-Interface.html#JIT-Interface" accesskey="p" rel="previous">JIT Interface</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</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="In_002dprocess-Agent-1"></a>
<h2 class="chapter">30 In-process Agent</h2>
<a name="index-debugging-agent"></a>
<p>The traditional debugging model is conceptually low-speed, but works fine,
because most bugs can be reproduced in debugging-mode execution.  However,
as multi-core or many-core processors are becoming mainstream, and
multi-threaded programs become more and more popular, there should be more
and more bugs that only manifest themselves at normal-mode execution, for
example, thread races, because debugger&rsquo;s interference with the program&rsquo;s
timing may conceal the bugs.  On the other hand, in some applications,
it is not feasible for the debugger to interrupt the program&rsquo;s execution
long enough for the developer to learn anything helpful about its behavior.
If the program&rsquo;s correctness depends on its real-time behavior, delays
introduced by a debugger might cause the program to fail, even when the
code itself is correct.  It is useful to be able to observe the program&rsquo;s
behavior without interrupting it.
</p>
<p>Therefore, traditional debugging model is too intrusive to reproduce
some bugs.  In order to reduce the interference with the program, we can
reduce the number of operations performed by debugger.  The
<em>In-process Agent</em>, a shared library, is running within the same
process with inferior, and is able to perform some debugging operations
itself.  As a result, debugger is only involved when necessary, and
performance of debugging can be improved accordingly.  Note that
interference with program can be reduced but can&rsquo;t be removed completely,
because the in-process agent will still stop or slow down the program.
</p>
<p>The in-process agent can interpret and execute Agent Expressions
(see <a href="Agent-Expressions.html#Agent-Expressions">Agent Expressions</a>) during performing debugging operations.  The
agent expressions can be used for different purposes, such as collecting
data in tracepoints, and condition evaluation in breakpoints.
</p>
<a name="Control-Agent"></a><p>You can control whether the in-process agent is used as an aid for
debugging with the following commands:
</p>
<dl compact="compact">
<dd><a name="index-set-agent-on"></a>
</dd>
<dt><code>set agent on</code></dt>
<dd><p>Causes the in-process agent to perform some operations on behalf of the
debugger.  Just which operations requested by the user will be done
by the in-process agent depends on the its capabilities.  For example,
if you request to evaluate breakpoint conditions in the in-process agent,
and the in-process agent has such capability as well, then breakpoint
conditions will be evaluated in the in-process agent.
</p>
<a name="index-set-agent-off"></a>
</dd>
<dt><code>set agent off</code></dt>
<dd><p>Disables execution of debugging operations by the in-process agent.  All
of the operations will be performed by <small>GDB</small>.
</p>
<a name="index-show-agent"></a>
</dd>
<dt><code>show agent</code></dt>
<dd><p>Display the current setting of execution of debugging operations by
the in-process agent.
</p></dd>
</dl>
 
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="In_002dprocess-Agent-Protocol.html#In_002dprocess-Agent-Protocol" accesskey="1">In-process Agent Protocol</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>
 
<hr>
<div class="header">
<p>
Next: <a href="GDB-Bugs.html#GDB-Bugs" accesskey="n" rel="next">GDB Bugs</a>, Previous: <a href="JIT-Interface.html#JIT-Interface" accesskey="p" rel="previous">JIT Interface</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</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>