From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4017 invoked by alias); 20 Feb 2012 02:41:28 -0000 Received: (qmail 3082 invoked by uid 22791); 20 Feb 2012 02:41:21 -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; Mon, 20 Feb 2012 02:41:01 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1RzJBT-0007Gk-4n from Yao_Qi@mentor.com ; Sun, 19 Feb 2012 18:40:59 -0800 Received: from SVR-ORW-FEM-05.mgc.mentorg.com ([147.34.97.43]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Sun, 19 Feb 2012 18:40:58 -0800 Received: from [127.0.0.1] (147.34.91.1) by svr-orw-fem-05.mgc.mentorg.com (147.34.97.43) with Microsoft SMTP Server id 14.1.289.1; Sun, 19 Feb 2012 18:40:56 -0800 Message-ID: <4F41B2B1.2040303@codesourcery.com> Date: Mon, 20 Feb 2012 03: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: Eli Zaretskii CC: , Pedro Alves 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> In-Reply-To: <83r4xsuxft.fsf@gnu.org> Content-Type: multipart/mixed; boundary="------------000607000201060601090807" 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/msg00392.txt.bz2 --------------000607000201060601090807 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Content-length: 864 On 02/18/2012 08:40 PM, Eli Zaretskii wrote: > Then I suggest the following modified wording of that paragraph: > > Although called @dfn{agent expression}, because they originally > referred to the target-side debugging agent (@pxref{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. I replaced 'target-side debugging agent (@pxref{Agent})' with 'in-process agent (@pxref{In-Process Agent})', to explictly name `agent' as `In-Process Agent', to avoid of confusion. Here is the new patch on doc. -- Yao (齐尧) --------------000607000201060601090807 Content-Type: text/x-patch; name="0004-agent-doc.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0004-agent-doc.patch" Content-length: 6866 gdb/doc/ 2012-02-20 Yao Qi * agentexpr.texi (Agent Expressions): Update some parts for agent expression can not only be used in 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..cd2482f 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. @dfn{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 agent will still stop +or slow down the program. + +The 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 agent is used as an aid for debugging +with the following commands: + +@table @code +@kindex set agent on +@item set agent on +Causes the agent to perform some operations on behalf of the +debugger. Just which operations requested by the user will be done +by the agent depends on the agent's capabilities. For example, if +you request to evaluate breakpoint conditions in the agent, and the +agent has such capability as well, then breakpoint conditions will be +evaluated in the agent. + +@kindex set agent off +@item set agent off +Disables execution of debugging operations by the 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 agent. +@end table + @node GDB Bugs @chapter Reporting Bugs in @value{GDBN} @cindex bugs in @value{GDBN} -- 1.7.0.4 --------------000607000201060601090807--