Show More
@@ -648,10 +648,3 b' def set_trace(frame=None):' | |||
|
648 | 648 | If frame is not specified, debugging starts from caller's frame. |
|
649 | 649 | """ |
|
650 | 650 | Pdb().set_trace(frame or sys._getframe().f_back) |
|
651 | ||
|
652 | ||
|
653 | # Override built-in Pdb, since that version doesn't allow interrupting: | |
|
654 | import pdb | |
|
655 | pdb.set_trace = set_trace | |
|
656 | pdb.Pdb = Pdb | |
|
657 | del pdb |
@@ -6,6 +6,8 b'' | |||
|
6 | 6 | |
|
7 | 7 | import sys |
|
8 | 8 | import warnings |
|
9 | from tempfile import NamedTemporaryFile | |
|
10 | from subprocess import check_output | |
|
9 | 11 | |
|
10 | 12 | import nose.tools as nt |
|
11 | 13 | |
@@ -220,3 +222,44 b' def can_exit():' | |||
|
220 | 222 | |
|
221 | 223 | >>> sys.settrace(old_trace) |
|
222 | 224 | ''' |
|
225 | ||
|
226 | ||
|
227 | interruptible_debugger = """\ | |
|
228 | import threading | |
|
229 | import time | |
|
230 | from os import _exit | |
|
231 | ||
|
232 | from IPython.core.debugger import set_trace | |
|
233 | ||
|
234 | def interrupt(): | |
|
235 | time.sleep(0.1) | |
|
236 | import os, signal | |
|
237 | os.kill(os.getpid(), signal.SIGINT) | |
|
238 | threading.Thread(target=interrupt).start() | |
|
239 | ||
|
240 | # Timeout if the interrupt doesn't happen: | |
|
241 | def interrupt(): | |
|
242 | time.sleep(2) | |
|
243 | _exit(7) | |
|
244 | threading.Thread(target=interrupt, daemon=True).start() | |
|
245 | ||
|
246 | def main(): | |
|
247 | set_trace() | |
|
248 | ||
|
249 | if __name__ == '__main__': | |
|
250 | try: | |
|
251 | main() | |
|
252 | except KeyboardInterrupt: | |
|
253 | print("PASSED") | |
|
254 | """ | |
|
255 | ||
|
256 | ||
|
257 | def test_interruptible_core_debugger(): | |
|
258 | """The debugger can be interrupted.""" | |
|
259 | with NamedTemporaryFile("w") as f: | |
|
260 | f.write(interruptible_debugger) | |
|
261 | f.flush() | |
|
262 | result = check_output([sys.executable, f.name], | |
|
263 | encoding=sys.getdefaultencoding()) | |
|
264 | # Wait for it to start: | |
|
265 | assert "PASSED" in result |
General Comments 0
You need to be logged in to leave comments.
Login now