From: Pedro Alves <palves@redhat.com>
To: Simon Marchi <simon.marchi@polymtl.ca>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v2 2/5] Further cleanup/modernization of gdb.base/commands.exp
Date: Wed, 09 Nov 2016 15:59:00 -0000 [thread overview]
Message-ID: <c018dbb5-5aeb-8e90-38a9-f4c7aa29d39f@redhat.com> (raw)
In-Reply-To: <1e856161-24c0-5f93-7847-a2bf9af57e8c@redhat.com>
On 11/09/2016 03:56 PM, Pedro Alves wrote:
> On 11/09/2016 03:02 AM, Simon Marchi wrote:
>> On 2016-11-08 19:19, Pedro Alves wrote:
>>> - Use multi_line for matching multi-line GDB output.
>>>
>>> - Add a multi_line_input variant of multi_line to build GDB input and
>>> use it throughout.
>>>
>>> (The two changes above make the tests much more readable, IMO.)
>>>
>>> - Remove gdb_stop_suppressing_tests uses.
>>>
>>> - tighten a few regexps.
>>>
>>> - Replace send_gdb/gdb_expect with gdb_test_multiple and simplify,
>>> making pass/fail messages the same.
>>
>> I agree, the test is now much more readable.
>>
>>> + gdb_test \
>>> + [multi_line_input \
>>> + "while \$foo > 0" \
>>> + " p/x 0xfeedface" \
>>> + " set \$foo -= 1" \
>>> + "end"] \
>>> + [multi_line \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface\[^\n\]*" \
>>> + "\\\$\[0-9\]* = 0xfeedface"] \
>>> + "#1"
>>
>> In these instance, what is the [^\n] meant to match? Is it the \r? In
>> that case, multi_line matches it, so I think we can get rid of them
>> (throughout the file).
>>
>
> Indeed. I did that now, with the patchlet below, and the test
> still passes. Also found another place where we could use multi_line.
And I'm wondering whether this below as well would be a good idea,
or whether it'd obfuscate? If a good idea, maybe we'd put the new
variable in gdb.exp.
From 6ad38c7fd5a2f3c2937b5de4e94d87b86894873e Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Wed, 9 Nov 2016 15:45:53 +0000
Subject: [PATCH] valnum
---
gdb/testsuite/gdb.base/commands.exp | 89 ++++++++++++++++++++++---------------
1 file changed, 54 insertions(+), 35 deletions(-)
diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp
index c4bf425..f7909dc 100644
--- a/gdb/testsuite/gdb.base/commands.exp
+++ b/gdb/testsuite/gdb.base/commands.exp
@@ -33,8 +33,13 @@ proc runto_or_return {function} {
}
}
+# A regular expression that matches a value history number.
+# E.g., $1, $2, etc.
+set valnum_re "\\\$$decimal"
+
proc_with_prefix gdbvar_simple_if_test {} {
global gdb_prompt
+ global valnum_re
gdb_test_no_output "set \$foo = 0" "set foo"
# All this test should do is print 0xdeadbeef once.
@@ -45,7 +50,7 @@ proc_with_prefix gdbvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xdeadbeef" \
+ "$valnum_re = 0xdeadbeef" \
"#1"
# All this test should do is print 0xfeedface once.
@@ -56,12 +61,13 @@ proc_with_prefix gdbvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
"#2"
}
proc_with_prefix gdbvar_simple_while_test {} {
global gdb_prompt
+ global valnum_re
gdb_test_no_output "set \$foo = 5" "set foo"
# This test should print 0xfeedface five times.
@@ -72,16 +78,17 @@ proc_with_prefix gdbvar_simple_while_test {} {
" set \$foo -= 1" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}
proc_with_prefix gdbvar_complex_if_while_test {} {
global gdb_prompt
+ global valnum_re
gdb_test_no_output "set \$foo = 4" "set foo"
# This test should alternate between 0xdeadbeef and 0xfeedface two times.
@@ -96,15 +103,16 @@ proc_with_prefix gdbvar_complex_if_while_test {} {
" end" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}
proc_with_prefix progvar_simple_if_test {} {
global gdb_prompt
+ global valnum_re
runto_or_return factorial
@@ -119,7 +127,7 @@ proc_with_prefix progvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xdeadbeef" \
+ "$valnum_re = 0xdeadbeef" \
"#1"
# All this test should do is print 0xfeedface once.
@@ -130,12 +138,13 @@ proc_with_prefix progvar_simple_if_test {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
"#2"
}
proc_with_prefix progvar_simple_while_test {} {
global gdb_prompt
+ global valnum_re
runto_or_return factorial
@@ -150,16 +159,17 @@ proc_with_prefix progvar_simple_while_test {} {
" set value -= 1" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}
proc_with_prefix progvar_complex_if_while_test {} {
global gdb_prompt
+ global valnum_re
runto_or_return factorial
@@ -179,14 +189,16 @@ proc_with_prefix progvar_complex_if_while_test {} {
" end" \
"end"] \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"#1"
}
proc_with_prefix if_while_breakpoint_command_test {} {
+ global valnum_re
+
runto_or_return factorial
# Don't depend upon argument passing, since most simulators don't
@@ -218,10 +230,10 @@ proc_with_prefix if_while_breakpoint_command_test {} {
gdb_test \
"continue" \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"#1"
gdb_test "info break" "while.*set.*if.*p/x.*else.*p/x.*end.*"
}
@@ -282,6 +294,7 @@ proc_with_prefix breakpoint_command_test {} {
# Test a simple user defined command (with arguments)
proc_with_prefix user_defined_command_test {} {
global gdb_prompt
+ global valnum_re
gdb_test_no_output "set \$foo = 4" "set foo"
@@ -306,13 +319,16 @@ proc_with_prefix user_defined_command_test {} {
"" \
"enter commands"
+ global decimal
+ set valnum_re "\\\$$decimal"
+
gdb_test \
"mycommand \$foo" \
[multi_line \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface" \
- "\\\$\[0-9\]* = 0xdeadbeef" \
- "\\\$\[0-9\]* = 0xfeedface"] \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface" \
+ "$valnum_re = 0xdeadbeef" \
+ "$valnum_re = 0xfeedface"] \
"execute user-defined command"
gdb_test "show user mycommand" \
" while \\\$arg0.*set.* if \\\(\\\$arg0.*p/x.* else\[^\n\].*p/x.* end\[^\n\].* end\[^\n\].*" \
@@ -414,6 +430,7 @@ proc_with_prefix watchpoint_command_test {} {
proc_with_prefix test_command_prompt_position {} {
global gdb_prompt
+ global valnum_re
runto_or_return factorial
@@ -430,7 +447,7 @@ proc_with_prefix test_command_prompt_position {} {
"else" \
" p/x 0xdeadbeef" \
"end"] \
- "\\\$\[0-9\]* = 0xdeadbeef" \
+ "$valnum_re = 0xdeadbeef" \
"if test"
# Now let's test for the correct position of the '>' in gdb's
@@ -579,20 +596,22 @@ proc_with_prefix temporary_breakpoint_commands {} {
# Test that GDB can handle $arg0 outside of user functions without
# crashing.
proc_with_prefix stray_arg0_test { } {
+ global valnum_re
+
gdb_test "print \$arg0" \
- "\\\$\[0-9\]* = void" \
+ "$valnum_re = void" \
"#1"
gdb_test "if 1 == 1\nprint \$arg0\nend" \
- "\\\$\[0-9\]* = void" \
+ "$valnum_re = void" \
"#2"
gdb_test "print \$arg0 = 1" \
- "\\\$\[0-9\]* = 1" \
+ "$valnum_re = 1" \
"#3"
gdb_test "print \$arg0" \
- "\\\$\[0-9\]* = 1" \
+ "$valnum_re = 1" \
"#4"
}
--
2.5.5
next prev parent reply other threads:[~2016-11-09 15:59 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-09 0:19 [PATCH v2 0/5] Support an "unlimited" number of user-defined arguments Pedro Alves
2016-11-09 0:19 ` [PATCH v2 3/5] Fix PR 20559 - "eval" command and $arg0...$arg9/$argc substitution Pedro Alves
2016-11-09 0:19 ` [PATCH v2 1/5] gdb/testsuite: Introduce "proc_with_prefix" Pedro Alves
2016-11-09 1:56 ` Simon Marchi
2016-11-09 3:10 ` [PATCH] Make gdb.mi/user-selected-context-sync.exp use proc_with_prefix Simon Marchi
2016-11-09 15:15 ` Pedro Alves
2016-11-09 15:57 ` Simon Marchi
2016-11-09 11:50 ` [PATCH v2 1/5] gdb/testsuite: Introduce "proc_with_prefix" Yao Qi
2016-11-09 0:19 ` [PATCH v2 2/5] Further cleanup/modernization of gdb.base/commands.exp Pedro Alves
2016-11-09 3:02 ` Simon Marchi
2016-11-09 15:56 ` Pedro Alves
2016-11-09 15:59 ` Pedro Alves [this message]
2016-11-09 16:09 ` Simon Marchi
2016-11-09 16:16 ` Pedro Alves
2016-11-09 16:25 ` Simon Marchi
2016-11-09 18:51 ` Pedro Alves
2016-11-09 16:22 ` Pedro Alves
2016-11-09 16:37 ` Pedro Alves
2016-11-09 16:41 ` Pedro Alves
2016-11-09 0:25 ` [PATCH v2 5/5] Support an "unlimited" number of user-defined arguments Pedro Alves
2016-11-09 0:26 ` [PATCH v2 4/5] Test user-defined gdb commands and arguments stack Pedro Alves
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=c018dbb5-5aeb-8e90-38a9-f4c7aa29d39f@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--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