This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: regrtest: use faulthandler to dump the tracebacks on SIGUSR1
Type: Stage:
Components: Tests Versions: Python 3.3
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: vstinner
Priority: normal Keywords: patch

Created on 2011-05-13 23:01 by vstinner, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
regrtest_sigusr1-3.patch vstinner, 2011-05-23 14:57 review
Messages (6)
msg135947 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2011-05-13 23:01
When you run the test suite manually and a test hangs, it would be nice to be able to dump immediatly the tracebacks of all threads without having to wait the timeout (which is 1 hour by default...).

Attached patch installs a signal handler for the SIGUSR1 signal. So "kill -USR1 <pid>" dumps immedialty the tracebacks without stopping the tests.

I already used it many times. It's useful and I did not notice any failure introduced by this change. I tested on Linux, FreeBSD and OpenIndiana. faulthandler.register() is not implemented on Windows (which doesn't have SIGUSR1 by the way).

I moved also the call to faulthandler.register() into main() to get the same behaviour using:
./python Lib/test/regrtest.py ...
./python -m test.regrtest ...
./python -m test ...

Actually, the last one doesn't enable faulthandler.
msg135951 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2011-05-13 23:17
See also issue #12074.
msg136523 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2011-05-22 13:42
Update the patch and describe the new feature in regrtest doc (--help).
msg136654 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2011-05-23 14:57
Thanks for your review, here is an updated patch.
msg136655 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2011-05-23 14:58
Merwok's review:
<< Looks like a useful feature.


http://bugs.python.org/review/12073/diff/2659/6441
File Lib/test/regrtest.py (right):

http://bugs.python.org/review/12073/diff/2659/6441#newcode164
Lib/test/regrtest.py:164: You can send a SIGUSR1 signal to display the
traceback of the current threads.
“the traceback” (singular) “of the current threads” (plural) sounds a
bit strange to me: There is one traceback for many threads?

http://bugs.python.org/review/12073/diff/2659/6441#newcode165
Lib/test/regrtest.py:165: But send a signal may interrupt the current
system call and so interfer with
“Note that sending a signal may interrupt a system call in progress and
thus interfere with the tests, so only do it if a test hangs and you
want to know where.”

http://bugs.python.org/review/12073/show >>
msg167093 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2012-08-01 07:22
The change was already done in another issue. I'm closing this one.

changeset:   71315:30f91fbfc8b3
user:        Victor Stinner <victor.stinner@haypocalc.com>
date:        Wed Jul 13 23:47:21 2011 +0200
files:       Lib/test/regrtest.py
description:
Issue #12550: regrtest displays the Python traceback on SIGALRM or SIGUSR1
History
Date User Action Args
2022-04-11 14:57:17adminsetgithub: 56282
2012-08-01 07:22:59vstinnersetstatus: open -> closed
resolution: fixed
messages: + msg167093
2011-05-23 14:58:06vstinnersetmessages: + msg136655
2011-05-23 14:57:38vstinnersetfiles: - regrtest_sigusr1-2.patch
2011-05-23 14:57:35vstinnersetfiles: - regrtest_sigusr1.patch
2011-05-23 14:57:30vstinnersetfiles: + regrtest_sigusr1-3.patch

messages: + msg136654
2011-05-22 13:42:50vstinnersetfiles: + regrtest_sigusr1-2.patch

messages: + msg136523
2011-05-13 23:17:55vstinnersetmessages: + msg135951
2011-05-13 23:01:56vstinnercreate