[PATCH] Collecting strings at tracepoints

Stan Shebs stan_shebs@mentor.com
Mon Oct 3 15:51:00 GMT 2011


By default, when you ask to collect a char * at a tracepoint, only the 
numeric address is collected, which is a problem if you really want the 
string that the char * is pointing to.  This patch adds a /s option to 
the collect action that will dereference character pointers and collect 
the bytes up to the first zero, just as the familiar print command 
does.  You can optionally add a limit to the collect, so for instance 
"collect/s80 mystring" collects a maximum of 80 characters.

While conceptually simple, we need a new agent bytecode to make this 
work (writing a loop using existing bytecodes doesn't let us check that 
we're running off the edge of valid memory), and a support flag so that 
users get informed if the target doesn't support string collection.

If you're having a sense of dejavu about all this :-) , there was a 
discussion of syntax last year, starting from 
http://sourceware.org/ml/gdb/2010-06/msg00018.html .  I ended up 
following Michael Snyder's suggested syntax.

Stan
stan@codesourcery.com

2011-10-03  Stan Shebs <stan@codesourcery.com>

     String collection for tracepoints.
     * common/ax.def (tracenz): New bytecode.
     * ax-gdb.h (string_kludge): Declare.
     * ax-gdb.c: Include valprint.h and c-lang.h.
     (string_kludge): New global.
     (gen_traced_pop): Add string case.
     (agent_command): Add string case.
     * tracepoint.h (decode_agent_options): Declare.
     * tracepoint.c (decode_agent_options): New function.
     (validate_actionline): Call it.
     (encode_actions_1): Ditto.
     * target.h (struct target_ops): New method to_supports_string_tracing.
     (target_supports_string_tracing): New macro.
     * target.c (update_current_target): Add to_supports_string_tracing.
     * remote.c (struct remote_state): New field string_tracing.
     (remote_string_tracing_feature): New function.
     (remote_protocol_features): New feature tracenz.
     (remote_supports_string_tracing): New function.
     (init_remote_ops): Set to_supports_string_tracing.

     * tracepoint.c (agent_mem_read_string): New function.
     (eval_agent_expr): Call it for tracenz.
     * server.c (handle_query): Report support for tracenz.

     * gdb.texinfo (Tracepoint Action Lists): Document collect/s.
     * agentexpr.texi: Describe tracenz.

     * gdb.trace/collection.c: Add code using strings.
     * gdb.trace/collection.exp: Add tests of string collection.

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: tstr-patch-1
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20111003/445e4b35/attachment.ksh>


More information about the Gdb-patches mailing list