@@ -134,6 +134,8 @@ def __repr__(self):
134134
135135class Pdb (bdb .Bdb , cmd .Cmd ):
136136
137+ _previous_sigint_handler = None
138+
137139 def __init__ (self , completekey = 'tab' , stdin = None , stdout = None , skip = None ,
138140 nosigint = False ):
139141 bdb .Bdb .__init__ (self , skip = skip )
@@ -187,8 +189,6 @@ def sigint_handler(self, signum, frame):
187189 self .message ("\n Program interrupted. (Use 'cont' to resume)." )
188190 self .set_step ()
189191 self .set_trace (frame )
190- # restore previous signal handler
191- signal .signal (signal .SIGINT , self ._previous_sigint_handler )
192192
193193 def reset (self ):
194194 bdb .Bdb .reset (self )
@@ -337,6 +337,10 @@ def preloop(self):
337337 (expr , newvalue , oldvalue ))
338338
339339 def interaction (self , frame , traceback ):
340+ # Restore the previous signal handler at the Pdb prompt.
341+ if Pdb ._previous_sigint_handler :
342+ signal .signal (signal .SIGINT , Pdb ._previous_sigint_handler )
343+ Pdb ._previous_sigint_handler = None
340344 if self .setup (frame , traceback ):
341345 # no interaction desired at this time (happens if .pdbrc contains
342346 # a command like "continue")
@@ -1037,7 +1041,7 @@ def do_continue(self, arg):
10371041 """
10381042 if not self .nosigint :
10391043 try :
1040- self ._previous_sigint_handler = \
1044+ Pdb ._previous_sigint_handler = \
10411045 signal .signal (signal .SIGINT , self .sigint_handler )
10421046 except ValueError :
10431047 # ValueError happens when do_continue() is invoked from
0 commit comments