From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: sami wagiaalla <swagiaal@redhat.com>
Cc: Pedro Alves <pedro@codesourcery.com>,
gdb-patches@sourceware.org, Tom Tromey <tromey@redhat.com>
Subject: Re: [patch] Support inferior events in python
Date: Wed, 06 Jul 2011 19:42:00 -0000 [thread overview]
Message-ID: <20110706193742.GA4463@host1.jankratochvil.net> (raw)
In-Reply-To: <20110216111054.GA3594@host1.dyn.jankratochvil.net>
Hi Sami,
the testcase had some problems where multiple asynchronous events could happen
at the same time. This is difficult to parse without any new framework in the
.exp code.
As Pedro asked
http://sourceware.org/ml/gdb-patches/2011-02/msg00213.html
> Actually, do you really need non-stop?
I also do not think the testcases should / need to test the non-stop mode.
But currently it cannot test thread id in all-stop/sync mode, therefore I have
filed it as PR and kept the testcases in non-stop/async mode:
http://sourceware.org/bugzilla/show_bug.cgi?id=12967
Due to the difficulty of parsing events which can happen at the same time in
various order I have changed also the .c file so that only event can happen at
any time. I hope I did not lower the testcase coverage.
Another KFAIL has been filed as:
python threads incompatible with gdbserver
http://sourceware.org/bugzilla/show_bug.cgi?id=12966
I will check it in in some time without any comments.
Thanks,
Jan
2011-07-06 Sami Wagiaalla <swagiaal@redhat.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.python/py-events.exp: Remove pretty printing comment.
* gdb.python/py-evsignal.exp: New file.
* gdb.python/py-evthreads.c: Include signal.h.
(thread3): Remove variable count3. Remove variable bad and use raise
instead.
(thread2): Remove variable count2. Move thread3 pthread_create here,
merge pthread_join to a single line.
(main): Remove variable count1. Merge pthread_join with pthread_create
to a single line.
* gdb.python/py-evthreads.exp: Remove pretty printing comment. New
KFAIL python/12966 for gdbserver. Test return value of
gdb_compile_pthreads. Use gdb_run_cmd. Replace send_gdb and
gdb_expect by gdb_test and gdb_test_multiple.
(thread 2, thread 3): New tests.
--- a/gdb/testsuite/gdb.python/py-events.exp
+++ b/gdb/testsuite/gdb.python/py-events.exp
@@ -13,11 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# This file is part of the GDB testsuite. It tests Python-based
-# pretty-printing for the CLI.
-
-# Skip all tests if Python scripting is not enabled.
-
if $tracelevel then {
strace $tracelevel
}
--- /dev/null
+++ b/gdb/testsuite/gdb.python/py-evsignal.exp
@@ -0,0 +1,54 @@
+# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+if {[is_remote target]} {
+ # RuntimeError: Could not find event thread
+ kfail "python/12966" "Signal Thread 3"
+ return -1
+}
+
+load_lib gdb-python.exp
+
+set testfile "py-evsignal"
+set srcfile py-evthreads.c
+set binfile ${objdir}/${subdir}/${testfile}
+set pyfile ${srcdir}/${subdir}/py-events.py
+
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+ return -1
+}
+clean_restart $testfile
+
+if { [skip_python_tests] } { continue }
+
+gdb_test_no_output "python execfile ('${pyfile}')" ""
+
+gdb_test "Test_Events" "Event testers registered."
+gdb_test_no_output "set non-stop on"
+gdb_test_no_output "set target-async on"
+
+gdb_run_cmd
+gdb_test_multiple "" "Signal Thread 3" {
+ -re "event type: stop\r\nstop reason: signal\r\nstop signal: SIGUSR1\r\nthread num: 3\r\nevent type: stop\r\n$gdb_prompt $" {
+ pass "thread 3 was signaled"
+ }
+ -re "The target does not support running in non-stop mode" {
+ unsupported "non-stop mode is unsupported"
+ }
+}
--- a/gdb/testsuite/gdb.python/py-evthreads.c
+++ b/gdb/testsuite/gdb.python/py-evthreads.c
@@ -19,37 +19,35 @@
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
+#include <signal.h>
pthread_t thread2_id;
pthread_t thread3_id;
void* thread3 (void* d)
{
- int count3 = 0;
- count3++;
-
- int *bad;
- *bad = 1;
+ raise (SIGUSR1);
return NULL;
}
void* thread2 (void* d)
{
- int count2 = 0;
- count2++;
+ /* Do not quit thread3 asynchronously wrt thread2 stop - wait first on
+ thread3_id to stop. It would complicate testcase receiption of the
+ events. */
+
+ pthread_create (&thread3_id, NULL, thread3, NULL); pthread_join (thread3_id, NULL);
+
return NULL;
}
-int main (){
-
- pthread_create (&thread2_id, NULL, thread2, NULL);
- pthread_create (&thread3_id, NULL, thread3, NULL);
+int main (void)
+{
+ /* Use single line to not to race whether `thread2' breakpoint or `next' over
+ pthread_create will stop first. */
- int count1 = 0; // stop1
- count1++;
+ pthread_create (&thread2_id, NULL, thread2, NULL); pthread_join (thread2_id, NULL);
- pthread_join (thread2_id, NULL);
- pthread_join (thread3_id, NULL);
return 12;
}
--- a/gdb/testsuite/gdb.python/py-evthreads.exp
+++ b/gdb/testsuite/gdb.python/py-evthreads.exp
@@ -13,15 +13,16 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# This file is part of the GDB testsuite. It tests Python-based
-# pretty-printing for the CLI.
-
-# Skip all tests if Python scripting is not enabled.
-
if $tracelevel then {
strace $tracelevel
}
+if {[is_remote target]} {
+ # RuntimeError: Could not find event thread
+ kfail "python/12966" "Run to breakpoint 1"
+ return -1
+}
+
load_lib gdb-python.exp
set testfile "py-evthreads"
@@ -29,7 +30,9 @@ set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
set pyfile ${srcdir}/${subdir}/py-events.py
-gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+ return -1
+}
clean_restart $testfile
if { [skip_python_tests] } { continue }
@@ -44,76 +47,37 @@ gdb_breakpoint "main"
gdb_breakpoint "thread2"
gdb_breakpoint "thread3"
-send_gdb "run\n"
-gdb_expect {
- -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 1.*
-.*thread num: 1.*" {
- pass "reached breakpoint 1"
+gdb_run_cmd
+set test "Run to breakpoint 1"
+gdb_test_multiple "" $test {
+ -re "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 1\r\nthread num: 1\r\n$gdb_prompt $" {
+ pass $test
}
- timeout {
- fail "did not reach breakpoint 1"
- }
-}
-
-send_gdb "next\n"
-gdb_expect {
- -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 2.*
-.*thread num: 2.*" {
- pass "reached breakpoint 2"
+ -re "The target does not support running in non-stop mode" {
+ unsupported "non-stop mode is unsupported"
+ return
}
- timeout {
- fail "did not reach breakpoint 2"
- }
}
-send_gdb "next\n"
-gdb_expect {
- -re "event type: stop.*
-.*stop reason: breakpoint.*
-.*breakpoint number: 3.*
-.*thread num: 3.*" {
- pass "reached breakpoint 3"
- }
- timeout {
- fail "did not reach breakpoint 3"
- }
-}
+gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 2\r\nthread num: 2" "reached breakpoint 2"
-send_gdb "continue&\n"
-gdb_expect {
- -re ".*event type: continue.*
-.*thread num: 1.*\r\n$gdb_prompt " {
- pass "continue thread 1"
- }
- timeout {
- fail "continue thread 1 failed"
- }
-}
+gdb_test "thread 2" {\[Switching to thread 2 .*}
+
+gdb_test "next" "event type: stop\r\nstop reason: breakpoint\r\nbreakpoint number: 3\r\nthread num: 3" "reached breakpoint 3"
+
+gdb_test "thread 3" {\[Switching to thread 3 .*}
-gdb_test "thread 2" ".*Switching to thread 2.*"
-send_gdb "continue&\n"
-gdb_expect {
- -re ".*event type: continue.*
-.*thread num: 2.*" {
- pass "continue thread 2"
+set test "continue thread 1"
+gdb_test_multiple "continue&" $test {
+ -re "event type: continue\r\nthread num: 3\r\n$gdb_prompt " {
+ # This expect string must not expect the end-of-buffer '$'.
+ pass $test
}
- timeout {
- fail "continue thread 2 failed"
- }
}
-send_gdb "continue -a\n"
-gdb_expect {
- -re ".*stop reason: signal.*
-.*stop signal: SIGSEGV.*
-.*thread num: 3.*" {
- pass "thread 3 was signalled"
+set test "thread 3 was signaled"
+gdb_test_multiple "" $test {
+ -re "event type: stop\r\nstop reason: signal\r\nstop signal: SIGUSR1\r\nthread num: 3\r\nevent type: stop\r\n$" {
+ pass $test
}
- timeout {
- fail "thread 3 was not signalled"
- }
}
next prev parent reply other threads:[~2011-07-06 19:38 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-04 15:54 sami wagiaalla
2011-01-04 18:22 ` Eli Zaretskii
2011-01-04 20:09 ` Tom Tromey
2011-01-17 22:59 ` sami wagiaalla
2011-01-19 16:42 ` Tom Tromey
2011-01-21 23:06 ` sami wagiaalla
2011-01-28 16:21 ` Tom Tromey
2011-02-02 21:04 ` sami wagiaalla
2011-02-02 21:35 ` Tom Tromey
2011-02-03 16:41 ` sami wagiaalla
2011-02-03 18:26 ` Eli Zaretskii
2011-02-03 19:45 ` sami wagiaalla
2011-02-03 21:42 ` Tom Tromey
2011-02-04 20:07 ` sami wagiaalla
2011-02-04 20:29 ` Tom Tromey
2011-02-04 20:35 ` sami wagiaalla
2011-02-04 23:00 ` Paul Pluzhnikov
2011-02-05 5:44 ` Hui Zhu
2011-02-07 15:22 ` sami wagiaalla
2011-02-07 15:24 ` Tom Tromey
2011-02-07 15:34 ` Paul Pluzhnikov
2011-02-07 16:01 ` sami wagiaalla
2011-02-07 15:39 ` sami wagiaalla
2011-04-20 20:26 ` Patch for non-stop remote assertion (was: RE: [patch] Support inferior events in python) Marc Khouzam
2011-04-25 18:12 ` Patch for non-stop remote assertion Tom Tromey
2011-04-25 18:31 ` Marc Khouzam
2011-05-16 15:41 ` Marc Khouzam
2011-05-19 18:38 ` Tom Tromey
2011-02-09 7:55 ` [patch] Support inferior events in python Jan Kratochvil
2011-02-09 16:19 ` sami wagiaalla
2011-02-09 16:30 ` Jan Kratochvil
2011-02-11 15:28 ` sami wagiaalla
2011-02-11 15:55 ` Joel Brobecker
2011-02-11 19:19 ` sami wagiaalla
2011-02-11 19:46 ` Jan Kratochvil
2011-02-11 15:57 ` Pedro Alves
2011-02-14 17:36 ` sami wagiaalla
2011-02-16 11:48 ` Jan Kratochvil
2011-07-06 19:42 ` Jan Kratochvil [this message]
2011-07-07 13:51 ` sami wagiaalla
2011-07-07 14:03 ` Jan Kratochvil
2011-09-13 21:45 ` Jan Kratochvil
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=20110706193742.GA4463@host1.jankratochvil.net \
--to=jan.kratochvil@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=pedro@codesourcery.com \
--cc=swagiaal@redhat.com \
--cc=tromey@redhat.com \
/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