From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22470 invoked by alias); 29 Nov 2006 18:44:00 -0000 Received: (qmail 22456 invoked by uid 22791); 29 Nov 2006 18:43:59 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 29 Nov 2006 18:43:54 +0000 Received: (qmail 19403 invoked from network); 29 Nov 2006 18:43:53 -0000 Received: from unknown (HELO localhost) (jimb@127.0.0.2) by mail.codesourcery.com with ESMTPA; 29 Nov 2006 18:43:53 -0000 To: "Rob Quill" Cc: gdb@sourceware.org Subject: Re: Checking variable scope References: From: Jim Blandy Date: Wed, 29 Nov 2006 18:44:00 -0000 In-Reply-To: (Rob Quill's message of "Wed, 29 Nov 2006 13:20:44 +0000") Message-ID: User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2006-11/txt/msg00236.txt.bz2 "Rob Quill" writes: > On 28/11/06, Jim Blandy wrote: >> >> "Rob Quill" writes: >> > The aim would be to add a command to gdb, in_scope (or similar) which >> > can be used from a GDB script to check if a variable is in scope >> > without throwing an error if is isn't. As currently if I do "print a" >> > and a is not in scope then I get an error and the script stops, which >> > is fine. But even better would be if I were able to check if a was in >> > scope and only print (or do other things with it) if it was. >> >> Why don't you add a new expression operator, $in_scope(a), which >> evaluates to zero or one? You could just imitate the other code in >> the parser and expression evaluator, so this should be straightforward >> to implement, and then you could use it in GDB script conditional >> commands. >> > > Could you elaborate on this a bit please? I'm not really sure what you > mean and how to go about implementing it. Right now, c-exp.y parses a C expression into an expression, represented using the structure in expression.h, and evaluated by the code in eval.c. But c-exp.y actually recognizes an extended grammar, with special additions for debugging, like the @ operator and array literals. I'm suggesting that you extend the grammar even further, by allowing one to say things like this (assume there is no binding for 'a' in scope, but there is a binding for 'b' in scope): (gdb) print $in_scope(a) $1 = 0 (gdb) print $in_scope(b) $1 = 1 (gdb)