blob: 2486e9df7003003e32b50b732e5aaf99e1f9d179 [file] [log] [blame]
<html lang="en">
<head>
<title>In-Process Agent - 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="prev" href="JIT-Interface.html#JIT-Interface" title="JIT Interface">
<link rel="next" href="GDB-Bugs.html#GDB-Bugs" title="GDB Bugs">
<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="In-Process-Agent"></a>
<a name="In_002dProcess-Agent"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="GDB-Bugs.html#GDB-Bugs">GDB Bugs</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="JIT-Interface.html#JIT-Interface">JIT Interface</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="index.html#Top">Top</a>
<hr>
</div>
<h2 class="chapter">30 In-Process Agent</h2>
<p><a name="index-debugging-agent-3161"></a>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's interference with the program's
timing may conceal the bugs. On the other hand, in some applications,
it is not feasible for the debugger to interrupt the program's execution
long enough for the developer to learn anything helpful about its behavior.
If the program'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's
behavior without interrupting it.
<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
<dfn>In-Process Agent</dfn>, 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't be removed completely,
because the in-process agent will still stop or slow down the program.
<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>You can control whether the in-process agent is used as an aid for
debugging with the following commands:
<a name="index-set-agent-on-3162"></a>
<dl><dt><code>set agent on</code><dd>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-3163"></a><br><dt><code>set agent off</code><dd>Disables execution of debugging operations by the in-process agent. All
of the operations will be performed by <span class="sc">gdb</span>.
<p><a name="index-show-agent-3164"></a><br><dt><code>show agent</code><dd>Display the current setting of execution of debugging operations by
the in-process agent.
</dl>
<ul class="menu">
<li><a accesskey="1" href="In_002dProcess-Agent-Protocol.html#In_002dProcess-Agent-Protocol">In-Process Agent Protocol</a>
</ul>
</body></html>