From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21492 invoked by alias); 22 Feb 2012 01:29:20 -0000 Received: (qmail 21480 invoked by uid 22791); 22 Feb 2012 01:29:17 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 22 Feb 2012 01:29:02 +0000 Received: from svr-orw-exc-10.mgc.mentorg.com ([147.34.98.58]) by relay1.mentorg.com with esmtp id 1S010u-0002D5-PG from Yao_Qi@mentor.com ; Tue, 21 Feb 2012 17:29:00 -0800 Received: from SVR-ORW-FEM-02.mgc.mentorg.com ([147.34.96.206]) by SVR-ORW-EXC-10.mgc.mentorg.com with Microsoft SMTPSVC(6.0.3790.4675); Tue, 21 Feb 2012 17:29:02 -0800 Received: from [127.0.0.1] (147.34.91.1) by svr-orw-fem-02.mgc.mentorg.com (147.34.96.168) with Microsoft SMTP Server id 14.1.289.1; Tue, 21 Feb 2012 17:28:59 -0800 Message-ID: <4F4444C0.3050402@codesourcery.com> Date: Wed, 22 Feb 2012 01:56:00 -0000 From: Yao Qi User-Agent: Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20120130 Thunderbird/10.0 MIME-Version: 1.0 To: Pedro Alves CC: Eli Zaretskii , Subject: Re: [PATCH 4/9] agent doc References: <1329447300-18841-1-git-send-email-yao@codesourcery.com> <1329447300-18841-5-git-send-email-yao@codesourcery.com> <83booxwv0m.fsf@gnu.org> <4F3E5251.1030202@codesourcery.com> <83r4xsuxft.fsf@gnu.org> <4F41B2B1.2040303@codesourcery.com> <4F43D3E3.8070307@redhat.com> In-Reply-To: <4F43D3E3.8070307@redhat.com> Content-Type: multipart/mixed; boundary="------------030502050503090003040906" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-02/txt/msg00467.txt.bz2 --------------030502050503090003040906 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Content-length: 1979 On 02/22/2012 01:26 AM, Pedro Alves wrote: > On 02/20/2012 02:40 AM, Yao Qi wrote: > >> -When GDB is debugging a remote target, the GDB @dfn{agent} code running >> +Although called @dfn{agent expression}, because they originally >> +referred to the in-process agent (@pxref{In-Process Agent}), these > > That's incorrect. Agent expressions existed long before the in-process > agent was invented. See the confusion about calling the new IPA thing > just "agent"? > I didn't realize "agent" was introduced back in 1999, long before IPA was created. > From agentexpr.texi: > > When GDB is debugging a remote target, the GDB @dfn{agent} code running > on the target computes the values of the expressions itself. To avoid > having a full symbolic expression evaluator on the agent, GDB translates > expressions in the source language into a simpler bytecode language, and > then sends the bytecode to the agent; the agent then executes the > bytecode, and records the values for GDB to retrieve later. > (...) The interpreter is > small, and strict limits on the memory and time required to evaluate an > expression are easy to determine, making it suitable for use by the > debugging agent in real-time applications. > > So nothing mentioned here about in-process or not. This applies all the > same to the agent expression mechinary in GDBserver (tracepoints, etc.). > That's an agent as well. "agent" is a very loose term for roughly something > that runs on the remote target on GDB's behalf. Can we just drop that > explanation? If we name things clearly then that's unnecessary. > I am inclined to leave this explanation there, as it is still useful to generic term "agent". > So I'd suggest also: > > On 02/20/2012 02:40 AM, Yao Qi wrote: >> +reduce the number of operations performed by debugger. @dfn{Agent}, > > the in-process agent > s/agent/in-process agent/ in my patch. -- Yao (齐尧) --------------030502050503090003040906 Content-Type: text/x-patch; name="0004-agent-doc.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0004-agent-doc.patch" Content-length: 6998 gdb/doc/ 2012-02-22 Yao Qi * agentexpr.texi (Agent Expressions): Update some parts for agent expression can not only be used in in-process agent, but also in remote stubs. Move some contents to ... * gdb.texinfo (In-Process Agent): ... to here. New node. Document new commands. --- gdb/doc/agentexpr.texi | 37 ++++++++++------------------- gdb/doc/gdb.texinfo | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 24 deletions(-) diff --git a/gdb/doc/agentexpr.texi b/gdb/doc/agentexpr.texi index d0f6f15..65e4423 100644 --- a/gdb/doc/agentexpr.texi +++ b/gdb/doc/agentexpr.texi @@ -13,32 +13,21 @@ @node Agent Expressions @appendix The GDB Agent Expression Mechanism - -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. - -Using GDB's @code{trace} and @code{collect} commands, the user can -specify locations in the program, and arbitrary expressions to evaluate -when those locations are reached. Later, using the @code{tfind} -command, she can examine the values those expressions had when the -program hit the trace points. The expressions may also denote objects -in memory --- structures or arrays, for example --- whose values GDB -should record; while visiting a particular tracepoint, the user may -inspect those objects as if they were in memory at that moment. -However, because GDB records these values without interacting with the -user, it can do so quickly and unobtrusively, hopefully not disturbing -the program's behavior. - -When GDB is debugging a remote target, the GDB @dfn{agent} code running +Although called @dfn{agent expression}, because they originally +referred to the in-process agent (@pxref{In-Process Agent}), these +expressions can be used in conjunction with many unrelated @value{GDBN} +features, such as expressions used in tracepoints for data collection, +expressions used in breakpoint condition evaluation, etc. Note that the +expressions may also denote registers and objects in memory---structures +or arrays, for example---whose values @value{GDBN} should record. + +When @value{GDBN} is debugging, the @value{GDBN} agent code running on the target computes the values of the expressions itself. To avoid -having a full symbolic expression evaluator on the agent, GDB translates -expressions in the source language into a simpler bytecode language, and -then sends the bytecode to the agent; the agent then executes the -bytecode, and records the values for GDB to retrieve later. +having a full symbolic expression evaluator on the agent or remote stub, +@value{GDBN} translates expressions in the source language into a simpler +bytecode language, and then sends the bytecode to the agent; the agent +then executes the bytecode, and records the values for @value{GDBN} to +retrieve later. The bytecode language is simple; there are forty-odd opcodes, the bulk of which are the usual vocabulary of C operands (addition, subtraction, diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 34bf77e..0eb3811 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -154,6 +154,7 @@ software in general. We will miss him. * GDB/MI:: @value{GDBN}'s Machine Interface. * Annotations:: @value{GDBN}'s annotation interface. * JIT Interface:: Using the JIT debugging interface. +* In-Process Agent:: In-Process Agent * GDB Bugs:: Reporting bugs in @value{GDBN} @@ -32191,6 +32192,63 @@ frame and to write out the values of the registers in the previous frame. Both have a callback (@code{target_read}) to read bytes off the target's address space. +@node In-Process Agent +@chapter In-Process Agent +@cindex debugging agent +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. + +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}, 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. + +The in-process agent can interpret and execute Agent Expressions +(@pxref{Agent Expressions}) during performing debugging operations. The +agent expressions can be used for different purposes, such as collecting +data in tracepoints, and condition evaluation in breakpoints. + +@anchor{Control Agent} +You can control whether the in-process agent is used as an aid for +debugging with the following commands: + +@table @code +@kindex set agent on +@item set agent on +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. + +@kindex set agent off +@item set agent off +Disables execution of debugging operations by the in-process agent. All +of the operations will be performed by @value{GDBN}. + +@kindex show agent +@item show agent +Display the current setting of execution of debugging operations by +the in-process agent. +@end table + @node GDB Bugs @chapter Reporting Bugs in @value{GDBN} @cindex bugs in @value{GDBN} -- 1.7.0.4 --------------030502050503090003040906--