@@ -402,6 +402,8 @@ def setup(self, f, tb):
402
402
self .curframe = self .stack [self .curindex ][0 ]
403
403
self .set_convenience_variable (self .curframe , '_frame' , self .curframe )
404
404
405
+ self ._save_initial_file_mtime (self .curframe )
406
+
405
407
if self ._chained_exceptions :
406
408
self .set_convenience_variable (
407
409
self .curframe ,
@@ -494,9 +496,21 @@ def _cmdloop(self):
494
496
except KeyboardInterrupt :
495
497
self .message ('--KeyboardInterrupt--' )
496
498
499
+ def _save_initial_file_mtime (self , frame ):
500
+ """save the mtime of the all the files in the frame stack in the file mtime table
501
+ if they haven't been saved yet."""
502
+ while frame :
503
+ filename = frame .f_code .co_filename
504
+ if filename not in self ._file_mtime_table :
505
+ try :
506
+ self ._file_mtime_table [filename ] = os .path .getmtime (filename )
507
+ except Exception :
508
+ pass
509
+ frame = frame .f_back
510
+
497
511
def _validate_file_mtime (self ):
498
- """Check if the source file of the current frame has been modified since
499
- the last time we saw it. If so, give a warning."""
512
+ """Check if the source file of the current frame has been modified.
513
+ If so, give a warning and reset the modify time to current ."""
500
514
try :
501
515
filename = self .curframe .f_code .co_filename
502
516
mtime = os .path .getmtime (filename )
@@ -506,7 +520,7 @@ def _validate_file_mtime(self):
506
520
mtime != self ._file_mtime_table [filename ]):
507
521
self .message (f"*** WARNING: file '{ filename } ' was edited, "
508
522
"running stale code until the program is rerun" )
509
- self ._file_mtime_table [filename ] = mtime
523
+ self ._file_mtime_table [filename ] = mtime
510
524
511
525
# Called before loop, handles display expressions
512
526
# Set up convenience variable containers
@@ -836,7 +850,6 @@ def onecmd(self, line):
836
850
a breakpoint command list definition.
837
851
"""
838
852
if not self .commands_defining :
839
- self ._validate_file_mtime ()
840
853
if line .startswith ('_pdbcmd' ):
841
854
command , arg , line = self .parseline (line )
842
855
if hasattr (self , command ):
@@ -980,6 +993,7 @@ def completedefault(self, text, line, begidx, endidx):
980
993
981
994
def _pdbcmd_print_frame_status (self , arg ):
982
995
self .print_stack_trace (0 )
996
+ self ._validate_file_mtime ()
983
997
self ._show_display ()
984
998
985
999
def _pdbcmd_silence_frame_status (self , arg ):
@@ -1861,6 +1875,7 @@ def do_list(self, arg):
1861
1875
self .message ('[EOF]' )
1862
1876
except KeyboardInterrupt :
1863
1877
pass
1878
+ self ._validate_file_mtime ()
1864
1879
do_l = do_list
1865
1880
1866
1881
def do_longlist (self , arg ):
@@ -1879,6 +1894,7 @@ def do_longlist(self, arg):
1879
1894
self .error (err )
1880
1895
return
1881
1896
self ._print_lines (lines , lineno , breaklist , self .curframe )
1897
+ self ._validate_file_mtime ()
1882
1898
do_ll = do_longlist
1883
1899
1884
1900
def do_source (self , arg ):
0 commit comments