diff options
author | Stan Shebs <shebs@codesourcery.com> | 2009-07-14 21:40:34 +0000 |
---|---|---|
committer | Stan Shebs <shebs@codesourcery.com> | 2009-07-14 21:40:34 +0000 |
commit | 782b2b07842dcec0cbd9c4248b155d7acf8c8dbe (patch) | |
tree | ac5c0fb0117ac15be913c0fa20a659ec90ef1028 /gdb/doc | |
parent | f662c3bce4df8aa5361122ea49dec9ee0e14dfad (diff) | |
download | gdb-782b2b07842dcec0cbd9c4248b155d7acf8c8dbe.zip gdb-782b2b07842dcec0cbd9c4248b155d7acf8c8dbe.tar.gz gdb-782b2b07842dcec0cbd9c4248b155d7acf8c8dbe.tar.bz2 |
gdb/
Conditional tracepoints.
* ax-gdb.h (gen_eval_for_expr): Declare.
* ax-gdb.c (gen_expr): Generate bytecodes for BINOP_EQUAL
and other comparisons.
(gen_eval_for_expr): New function.
(agent_eval_command): New maintenance command.
(_initialize_ax_gdb): Define the command.
* remote.c (struct remote_state): New field cond_tracepoints.
(PACKET_ConditionalTracepoints): New packet config type.
(remote_cond_tracepoint_feature): New function.
(remote_protocol_features): Add ConditionalTracepoints.
(remote_supports_cond_tracepoints): New function.
(_initialize_remote): Add ConditionalTracepoints.
* tracepoint.c (download_tracepoint): Add conditional.
* NEWS: Mention conditional tracepoints.
gdb/doc/
* gdb.texinfo (Tracepoint Conditions): New section.
(General Query Packets): Describe ConditionalTracepoints.
(Tracepoint Packets): Describe condition field.
(Maintenance Commands): Describe maint agent-eval.
* agentexpr.texi (Using Agent Expressions): Mention eval usage.
gdb/testsuite/
* gdb.trace/tracecmd.exp: Add basic test of tracepoint conditions.
Diffstat (limited to 'gdb/doc')
-rw-r--r-- | gdb/doc/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/doc/agentexpr.texi | 20 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 73 |
3 files changed, 93 insertions, 8 deletions
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index cea168c..01fb199 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,11 @@ +2009-07-14 Stan Shebs <stan@codesourcery.com> + + * gdb.texinfo (Tracepoint Conditions): New section. + (General Query Packets): Describe ConditionalTracepoints. + (Tracepoint Packets): Describe condition field. + (Maintenance Commands): Describe maint agent-eval. + * agentexpr.texi (Using Agent Expressions): Mention eval usage. + 2009-07-11 Hui Zhu <teawater@gmail.com> * gdb.texinfo (disassemble): Add a new modifier /r diff --git a/gdb/doc/agentexpr.texi b/gdb/doc/agentexpr.texi index 1b893d5..3066319 100644 --- a/gdb/doc/agentexpr.texi +++ b/gdb/doc/agentexpr.texi @@ -7,13 +7,11 @@ @c This file is part of the GDB manual. @c -@c Copyright (C) 2003, 2004, 2005, 2006 +@c Copyright (C) 2003, 2004, 2005, 2006, 2009 @c Free Software Foundation, Inc. @c @c See the file gdb.texinfo for copying conditions. -@c Revision: $Id$ - @node Agent Expressions @appendix The GDB Agent Expression Mechanism @@ -473,8 +471,20 @@ address, and the top of the stack is the lvalue's size, in bytes. @node Using Agent Expressions @section Using Agent Expressions -Here is a sketch of a full non-stop debugging cycle, showing how agent -expressions fit into the process. +Agent expressions can be used in several different ways by @value{GDBN}, +and the debugger can generate different bytecode sequences as appropriate. + +One possibility is to do expression evaluation on the target rather +than the host, such as for the conditional of a conditional +tracepoint. In such a case, @value{GDBN} compiles the source +expression into a bytecode sequence that simply gets values from +registers or memory, does arithmetic, and returns a result. + +Another way to use agent expressions is for tracepoint data +collection. @value{GDBN} generates a different bytecode sequence for +collection; in addition to bytecodes that do the calculation, +@value{GDBN} adds @code{trace} bytecodes to save the pieces of +memory that were used. @itemize @bullet diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index fc5e60f..71ae4b5 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -8932,6 +8932,7 @@ conditions and actions. * Create and Delete Tracepoints:: * Enable and Disable Tracepoints:: * Tracepoint Passcounts:: +* Tracepoint Conditions:: * Tracepoint Actions:: * Listing Tracepoints:: * Starting and Stopping Trace Experiments:: @@ -8971,6 +8972,13 @@ Here are some examples of using the @code{trace} command: @noindent You can abbreviate @code{trace} as @code{tr}. +@item trace @var{location} if @var{cond} +Set a tracepoint with condition @var{cond}; evaluate the expression +@var{cond} each time the tracepoint is reached, and collect data only +if the value is nonzero---that is, if @var{cond} evaluates as true. +@xref{Tracepoint Conditions, ,Tracepoint Conditions}, for more +information on tracepoint conditions. + @vindex $tpnum @cindex last tracepoint number @cindex recent tracepoint number @@ -9053,6 +9061,44 @@ Examples: @end smallexample @end table +@node Tracepoint Conditions +@subsection Tracepoint Conditions +@cindex conditional tracepoints +@cindex tracepoint conditions + +The simplest sort of tracepoint collects data every time your program +reaches a specified place. You can also specify a @dfn{condition} for +a tracepoint. A condition is just a Boolean expression in your +programming language (@pxref{Expressions, ,Expressions}). A +tracepoint with a condition evaluates the expression each time your +program reaches it, and data collection happens only if the condition +is true. + +Tracepoint conditions can be specified when a tracepoint is set, by +using @samp{if} in the arguments to the @code{trace} command. +@xref{Create and Delete Tracepoints, ,Setting Tracepoints}. They can +also be set or changed at any time with the @code{condition} command, +just as with breakpoints. + +Unlike breakpoint conditions, @value{GDBN} does not actually evaluate +the conditional expression itself. Instead, @value{GDBN} encodes the +expression into an agent expression (@pxref{Agent Expressions} +suitable for execution on the target, independently of @value{GDBN}. +Global variables become raw memory locations, locals become stack +accesses, and so forth. + +For instance, suppose you have a function that is usually called +frequently, but should not be called after an error has occurred. You +could use the following tracepoint command to collect data about calls +of that function that happen while the error code is propagating +through the program; an unconditional tracepoint could end up +collecting thousands of useless trace frames that you would have to +search through. + +@smallexample +(@value{GDBP}) @kbd{trace normal_operation if errcode > 0} +@end smallexample + @node Tracepoint Actions @subsection Tracepoint Action Lists @@ -26534,10 +26580,19 @@ messages, see @ref{Debugging Output}.) @table @code @kindex maint agent +@kindex maint agent-eval @item maint agent @var{expression} +@itemx maint agent-eval @var{expression} Translate the given @var{expression} into remote agent bytecodes. This command is useful for debugging the Agent Expression mechanism -(@pxref{Agent Expressions}). +(@pxref{Agent Expressions}). The @samp{agent} version produces an +expression useful for data collection, such as by tracepoints, while +@samp{maint agent-eval} produces an expression that evaluates directly +to a result. For instance, a collection expression for @code{globa + +globb} will include bytecodes to record four bytes of memory at each +of the addresses of @code{globa} and @code{globb}, while discarding +the result of the addition, while an evaluation expression will do the +addition and return the sum. @kindex maint info breakpoints @item @anchor{maint info breakpoints}maint info breakpoints @@ -28415,6 +28470,11 @@ These are the currently defined stub features and their properties: @tab @samp{-} @tab No +@item @samp{ConditionalTracepoints} +@tab No +@tab @samp{-} +@tab No + @end multitable These are the currently defined stub features, in more detail: @@ -28492,6 +28552,10 @@ indicated it supports them in its @samp{qSupported} request. The remote stub understands the @samp{qXfer:osdata:read} packet ((@pxref{qXfer osdata read}). +@item ConditionalTracepoints +The remote stub accepts and implements conditional expressions defined +for tracepoints (@pxref{Tracepoint Conditions}). + @end table @item qSymbol:: @@ -28804,11 +28868,14 @@ tracepoints (@pxref{Tracepoints}). @table @samp -@item QTDP:@var{n}:@var{addr}:@var{ena}:@var{step}:@var{pass}@r{[}-@r{]} +@item QTDP:@var{n}:@var{addr}:@var{ena}:@var{step}:@var{pass}[:X@var{len},@var{bytes}]@r{[}-@r{]} Create a new tracepoint, number @var{n}, at @var{addr}. If @var{ena} is @samp{E}, then the tracepoint is enabled; if it is @samp{D}, then the tracepoint is disabled. @var{step} is the tracepoint's step -count, and @var{pass} is its pass count. If the trailing @samp{-} is +count, and @var{pass} is its pass count. If an @samp{X} is present, +it introduces a tracepoint condition, which consists of a hexadecimal +length, followed by a comma and hex-encoded bytes, in a manner similar +to action encodings as described below. If the trailing @samp{-} is present, further @samp{QTDP} packets will follow to specify this tracepoint's actions. |