From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cagney To: GDB Discussion Subject: header dependency; Was: [rfc] Re-merged regcache.h patch Date: Wed, 28 Feb 2001 07:29:00 -0000 Message-id: <3A9D189E.C48AD36E@cygnus.com> References: <3A9D137C.BF7050EA@cygnus.com> X-SW-Source: 2001-02/msg00431.html Hello, When revising the regcache.h patch, I knocked up the attatched (perl free zone :-) script. It grubs around the source identifying which .c files actually use functions/variables from a given header file. While this script is probably best treated as a novelty - it only just works for regcache.h - I'm wondering if anyone knows of a GPL package that does this analysis properly. Andrew #!/bin/sh parser=/tmp/do-analize-include-parse refs=/tmp/do-analize-include-refs files=/tmp/do-analize-include-files good=/tmp/do-analize-include-good rm ${parser} rm ${refs} # Generate a parser to recognize any reference to a method in "$@" echo "Creating parse script" 1>&2 cat "$@" | awk ' # external pointer $0 != n = gensub (/^extern [^\(\*]*\*([_[:alpha:]][_[:alnum:]]*);$/, "\\1", 1) { print "/[^[:alnum:]]" n "[[:space:]]*\\[/ { p = 1 } # pointer" } $0 != n = gensub (/^extern [^\(]*[^_\([:alnum:]]([_[:alpha:]][_[:alnum:]]*)[[:space:]]\(.*$/, "\\1", 1) { print "/[^[:alnum:]]" n "[[:space:]]*\\(/ { p = 1 } # function" } ' >> ${parser} cat <> ${parser} p { print FILENAME ":" NR ":" \$0; p = 0; } EOF cat ${parser} # Parse the source files printing out a list of all references echo "Parsing" 1>&2 find * \ -name '*-stub.c' -prune \ -o -name 'nlm' -prune \ -o -name 'gdbserver' -prune \ -o -name 'testsuite' -prune \ -o -name '*\.c' -type f -print | xargs awk -f ${parser} > ${refs} # Create a summary file of files containing refs cut -d: -f1 < ${refs} | sort -u > ${files} # Check to see if the file includes our target xargs grep -e '#include *"'$1'"' < ${files} | cut -d: -f 1 | sort > ${good} diff ${good} ${files} >From keiths@cygnus.com Wed Feb 28 07:53:00 2001 From: Keith Seitz To: Edward Peschko Cc: gdb@sourceware.cygnus.com Subject: Re: using perl in gdbinit Date: Wed, 28 Feb 2001 07:53:00 -0000 Message-id: References: <20010227160952.A25814@excitehome.net> X-SW-Source: 2001-02/msg00432.html Content-length: 1123 On Tue, 27 Feb 2001, Edward Peschko wrote: > I'd like to use perl in gdbinit to make gdb commands and bind them to a key. > So I could say stuff like: > > local($/) = undef; > my $functions = `info functions`; [snip] I would guess that you should be able to add a perl interpreter to gdb. I don't know a whole lot about how perl was written, but if there is a way to create your own perl interpreter like this: init_perl () { g_interp = Perl_New_Interpreter (); } You should be able to do what you want (albeit in a hacky kind of way). For insight, we added a tcl interpreter and bound tcl's command parser to the gdb command "tk". We also have a tcl command, "gdb_cmd", which can be used to execute gdb commands in the tcl interpreter. I could do things like what you want above (although I never have): (gdb) tk set help [gdb_cmd help]; puts stdout $help (gdb) tk set functions [gdb_cmd "info func main"]; puts stdout $functions Of course, you are still leaving yourself at the mercy of gdb's human readable output, so you'll need to parse gdb's output to do some things well. Keith