DebugClients/Python/DebugBase.py

branch
maintenance
changeset 6693
3629d88ae235
parent 6687
352a7abb5582
child 6891
93f82da09f22
equal deleted inserted replaced
6647:2a11e1b2dcbe 6693:3629d88ae235
706 @keyparam applyTrace flag to assign trace function to fr.f_trace 706 @keyparam applyTrace flag to assign trace function to fr.f_trace
707 @type bool 707 @type bool
708 @return list of lists with file name (string), line number (integer) 708 @return list of lists with file name (string), line number (integer)
709 and function name (string) 709 and function name (string)
710 """ 710 """
711 tb_lineno = None
711 if frame is None: 712 if frame is None:
712 fr = self.getCurrentFrame() 713 fr = self.getCurrentFrame()
713 elif type(frame) == list: 714 elif type(frame) == list:
714 fr = frame.pop(0) 715 fr, tb_lineno = frame.pop(0)
715 else: 716 else:
716 fr = frame 717 fr = frame
717 718
718 stack = [] 719 stack = []
719 while fr is not None: 720 while fr is not None:
730 if stack and os.path.basename(fname).startswith( 731 if stack and os.path.basename(fname).startswith(
731 ("DebugBase.py", "DebugClientBase.py", 732 ("DebugBase.py", "DebugClientBase.py",
732 "ThreadExtension.py", "threading.py")): 733 "ThreadExtension.py", "threading.py")):
733 break 734 break
734 735
735 fline = fr.f_lineno 736 fline = tb_lineno or fr.f_lineno
736 ffunc = fr.f_code.co_name 737 ffunc = fr.f_code.co_name
737 738
738 if ffunc == '?': 739 if ffunc == '?':
739 ffunc = '' 740 ffunc = ''
740 741
752 stack.append([fname, fline, ffunc, fargs]) 753 stack.append([fname, fline, ffunc, fargs])
753 754
754 # is it a stack frame or exception list? 755 # is it a stack frame or exception list?
755 if type(frame) == list: 756 if type(frame) == list:
756 if frame != []: 757 if frame != []:
757 fr = frame.pop(0) 758 fr, tb_lineno = frame.pop(0)
758 else: 759 else:
759 fr = None 760 fr = None
760 else: 761 else:
761 fr = fr.f_back 762 fr = fr.f_back
762 763
884 stack = [] 885 stack = []
885 if exctb: 886 if exctb:
886 frlist = self.__extract_stack(exctb) 887 frlist = self.__extract_stack(exctb)
887 frlist.reverse() 888 frlist.reverse()
888 889
889 self.currentFrame = frlist[0] 890 self.currentFrame = frlist[0][0]
890 stack = self.getStack(frlist[self.skipFrames:]) 891 stack = self.getStack(frlist[self.skipFrames:])
891 892
892 self._dbgClient.lockClient() 893 self._dbgClient.lockClient()
893 self._dbgClient.currentThread = self 894 self._dbgClient.currentThread = self
894 self._dbgClient.currentThreadExec = self 895 self._dbgClient.currentThreadExec = self
934 @return list of stack frames 935 @return list of stack frames
935 """ 936 """
936 tb = exctb 937 tb = exctb
937 stack = [] 938 stack = []
938 while tb is not None: 939 while tb is not None:
939 stack.append(tb.tb_frame) 940 stack.append((tb.tb_frame, tb.tb_lineno))
940 tb = tb.tb_next 941 tb = tb.tb_next
941 tb = None 942 tb = None
942 return stack 943 return stack
943 944
944 def __extractSystemExitMessage(self, excinfo): 945 def __extractSystemExitMessage(self, excinfo):

eric ide

mercurial