7979import codeop
8080import pprint
8181import signal
82+ import asyncio
8283import inspect
8384import textwrap
8485import tokenize
@@ -363,6 +364,8 @@ def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None,
363364 self ._chained_exceptions = tuple ()
364365 self ._chained_exception_index = 0
365366
367+ self ._current_task = None
368+
366369 def set_trace (self , frame = None , * , commands = None ):
367370 Pdb ._last_pdb_instance = self
368371 if frame is None :
@@ -405,7 +408,8 @@ def setup(self, f, tb):
405408 tb = tb .tb_next
406409 self .curframe = self .stack [self .curindex ][0 ]
407410 self .set_convenience_variable (self .curframe , '_frame' , self .curframe )
408-
411+ if self ._current_task :
412+ self .set_convenience_variable (self .curframe , '_asynctask' , self ._current_task )
409413 self ._save_initial_file_mtime (self .curframe )
410414
411415 if self ._chained_exceptions :
@@ -616,6 +620,13 @@ def _hold_exceptions(self, exceptions):
616620 self ._chained_exceptions = tuple ()
617621 self ._chained_exception_index = 0
618622
623+ def _get_asyncio_task (self ):
624+ try :
625+ task = asyncio .current_task ()
626+ except RuntimeError :
627+ task = None
628+ return task
629+
619630 def interaction (self , frame , tb_or_exc ):
620631 # Restore the previous signal handler at the Pdb prompt.
621632 if Pdb ._previous_sigint_handler :
@@ -626,6 +637,8 @@ def interaction(self, frame, tb_or_exc):
626637 else :
627638 Pdb ._previous_sigint_handler = None
628639
640+ self ._current_task = self ._get_asyncio_task ()
641+
629642 _chained_exceptions , tb = self ._get_tb_and_exceptions (tb_or_exc )
630643 if isinstance (tb_or_exc , BaseException ):
631644 assert tb is not None , "main exception must have a traceback"
0 commit comments