public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Luis Machado <lgustavo@codesourcery.com>, gdb-patches@sourceware.org
Cc: simon.marchi@polymtl.ca
Subject: Re: [PATCH,v2] Make language setting tests more robust
Date: Fri, 03 Feb 2017 00:37:00 -0000	[thread overview]
Message-ID: <4423d3ac-814c-2d71-e5fd-ed27368f02e1@redhat.com> (raw)
In-Reply-To: <1485980466-711-1-git-send-email-lgustavo@codesourcery.com>

On 02/01/2017 08:21 PM, Luis Machado wrote:

> One case of the warning being displayed happens when one has debug information
> for glibc, which may cause GDB to identify the frame as having an "asm"
> language. Therefore setting it to something else will get GDB's attention.
> 
> This patch addresses the problem by creating a function in lib/gdb.exp to
> set the language. That function will also handle potential warnings and check
> to make sure the language was properly selected.

Sorry to be a naysayer, but I'm not sure about this.  :-(  I recall fixing bugs
related to gdb printing that warning when it really should not, or causing
regressions locally due to breaking that logic, with the testsuite helping
notice them.  I worry that this would be hiding such bugs going forward.
Can you name the tests that where you saw the problem you mention?  Many of the tests
you're touching are changing the language after starting gdb with no binary
loaded, even.  Those definitely should not ever warn.  There are a few even that
have "no prompt when changing language"-like messages.

> Also, i noticed most of the languages have their own set_lang_<language> proc,
> and they are all the same.  Therefore i've removed those and switched to using
> only the new set_language proc.
> 
> I tried to confirm why set_lang_<language> was replicated, but my conclusion
> was that it was just the way the code worked and people just copy/pasted from
> an existing language .exp file.

One small advantage I see is that set_lang_<language> is a tcl symbol, so
if you typo it, you'll get a tcl error.  Kind of like avoiding sprinkling
magic constants in C.  You could keep the wrapper procs but define them
in terms of set_language, like:

proc set_lang_objc {} {
   set_language "objective-c"
}

But I won't insist.

> +# Set the language and handle possible warnings output by GDB if
> +# we select a language that differs from the current frame's language.
> +#
> +# The first argument is the language to be set.
> +#
> +# The second argument is an optional message to be output by the test.  If
> +# the message is empty, the command to set the language will be used instead.
> +
> +proc set_language { language { message "" } } {
> +    global gdb_prompt
> +
> +    set command "set language $language"
> +    set lang_pattern [string_to_regexp $language]
> +
> +    if { $message == "" } {
> +	set message $command
> +    }
> +
> +    # Switch to the user-selected language.
> +    gdb_test_multiple $command $message {
> +	-re "Undefined item: \"$lang_pattern\"\.\[\r\n\]+$gdb_prompt" {
> +	  fail $message
> +	  return 0
> +	}
> +	-re "Warning: the current language does not match this frame.\[\r\n\]+$gdb_prompt $" {
> +	}
> +	-re "$gdb_prompt $" {}
> +    }

Writing this as:

    set command_re [string_to_regexp $command]

    # Switch to the user-selected language.
    gdb_test_multiple $command $message {
	-re "Warning: the current language does not match this frame.\[\r\n\]+$gdb_prompt $" {
	}
	-re "^$command_re\r\n$gdb_prompt $" {
        }
	-re "$gdb_prompt" {
	  fail $message
	  return 0
	}
    }

Would be more robust in case the "Undefined item" output ever changes.

Thanks,
Pedro Alves

  parent reply	other threads:[~2017-02-03  0:37 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-01 15:17 [PATCH] " Luis Machado
2017-02-01 18:38 ` Simon Marchi
2017-02-01 19:22   ` Luis Machado
2017-02-01 19:25     ` Simon Marchi
2017-02-01 21:50   ` Keith Seitz
2017-02-01 23:29     ` Luis Machado
2017-02-02  1:24     ` Simon Marchi
2017-02-01 20:21 ` [PATCH,v2] " Luis Machado
2017-02-02  1:33   ` Simon Marchi
2017-02-03  0:37   ` Pedro Alves [this message]
2017-02-06 14:54     ` Luis Machado
2017-02-06 15:09       ` Luis Machado
2017-02-06 16:51       ` Pedro Alves
2017-02-06 18:04         ` Luis Machado
2017-02-06 18:08           ` Pedro Alves
2017-02-06 18:22             ` Luis Machado
2017-02-06 18:24               ` Pedro Alves
2017-02-06 19:56                 ` Luis Machado

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4423d3ac-814c-2d71-e5fd-ed27368f02e1@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=lgustavo@codesourcery.com \
    --cc=simon.marchi@polymtl.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).