CDebuggerEngine的settrace()函數(shù)
在7291行。
函數(shù)原型:def settrace(self, f = None, f_break_on_init = True, timeout = None, builtins_hack = None)
f:調(diào)用此函數(shù)之前的調(diào)用棧。
f_break_on_init:設(shè)置為False了。
builtins_hack :設(shè)置為被調(diào)試的文件全路徑名。
timeout :沒有動,取默認(rèn)值None。
1、獲得線程ID。
使用了thread.get_ident()函數(shù),不錯,學(xué)習(xí)到一招。
2、【待分析】self.set_request_go_timer(timeout)
不知道是干嗎的。
3、根據(jù)傳入?yún)?shù),初始化一些內(nèi)部變量。
4、【待分析】進行代碼調(diào)試跟蹤。
threading.settrace()
雖然不太明白這個函數(shù)是干什么用的,但是大概理解對多線程,要想trace代碼,必須先調(diào)用它,同時還要調(diào)用sys.settrace,二者缺一不可。
threading.settrace(self.trace_dispatch_init)
trace_dispatch_init:這是一個函數(shù),每次執(zhí)行一次,都要經(jīng)過這個函數(shù)處理,達(dá)到了代碼調(diào)試跟蹤的目的。
其實要想追蹤,還有一個條件,那就是設(shè)置調(diào)用棧的f_trace,一旦設(shè)置,系統(tǒng)就死了,下次執(zhí)行就進入到trace_dispatch_init函數(shù)中了。
f.f_trace = self.trace_dispatch_init