我sys.settrace
设置挂钩,会检查当前执行的代码对象是我的源文件(在C:驱动器)之一,如果是这样,给行号为linecache
以检索该行,然后将其附加到日志文件。但是当我运行这个钩子时,似乎只能在函数调用中调用,而不是像文档中的每一行都表示。这不是我所期待的,因为在教程中我遵循:http://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html 我的代码非常相似,但在该示例中很明显,每行都会调用sys.settrace
挂钩。sys.settrace才刚刚叫在函数调用,而不是每一行
我的跟踪代码:
from __future__ import with_statement
import sys
import re
import linecache
def startTracing():
sys.settrace(lineHook)
def lineHook(frame, event, arg):
scriptPath = "C:\MidiScript"
lineno = frame.f_lineno
p = re.compile(r"C:\\")
filename = str(frame.f_code.co_filename)
if p.match(filename):
line = linecache.getline(filename, lineno)
with open("C:\Midi Script\\test.txt", "a") as myfile:
myfile.write("event: " + str(event) + "\targ: " + str(arg) + "\t" + "line " + str(frame.f_lineno) + ":\tline: " + line + "\n")
return
一些输出的(大量的这种重复):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 115: line: def handle_sysex(self, midi_bytes):
event: call arg: None line 111: line: def refresh_state(self):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
event: call arg: None line 134: line: def _send_midi(self, midi_bytes, optimized = None):
您是否阅读过[文档](https://docs.python.org/2/library/sys.html#sys.settrace)? – BrenBarn
是的,我只是困惑,为什么它是所有'呼叫'事件,没有'线'。在一个程序中甚至可能如此? –
而'_send_midi'函数有行,它不仅仅是调用。 –