本文整理汇总了Python中wdb.Wdb.trace方法的典型用法代码示例。如果您正苦于以下问题:Python Wdb.trace方法的具体用法?Python Wdb.trace怎么用?Python Wdb.trace使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wdb.Wdb
的用法示例。
在下文中一共展示了Wdb.trace方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: main
# 需要导入模块: from wdb import Wdb [as 别名]
# 或者: from wdb.Wdb import trace [as 别名]
def main():
"""Inspired by python -m pdb. Debug any python script with wdb"""
if not sys.argv[1:] or sys.argv[1] in ("--help", "-h"):
print("usage: wdb.py scriptfile [arg] ...")
sys.exit(2)
mainpyfile = sys.argv[1]
if not os.path.exists(mainpyfile):
print('Error:', mainpyfile, 'does not exist')
sys.exit(1)
del sys.argv[0]
sys.path[0] = os.path.dirname(mainpyfile)
# Let's make a server in case of
wdbr = Wdb.trace()
# Multithread support
# Monkey patch threading to have callback to kill thread debugger
old_thread_start = threading.Thread.start
def wdb_thread_start(self):
"""Monkey patched start monkey patching run"""
self.old_run = self.run
def run(self):
"""Monkey patched run"""
try:
self.old_run()
finally:
if hasattr(self, '_wdbr'):
self._wdbr.die()
from wdb._compat import bind
self.run = bind(self, run)
old_thread_start(self)
threading.Thread.start = wdb_thread_start
def init_new_wdbr(frame, event, args):
"""First settrace call start the debugger for the current thread"""
import threading
import sys
from wdb import Wdb
thread = threading.currentThread()
if getattr(thread, 'no_trace', False):
sys.settrace(None)
return
wdbr_thread = Wdb.make_server()
thread._wdbr = wdbr_thread
frame = sys._getframe().f_back
wdbr_thread.stopframe = frame
wdbr_thread.botframe = frame
while frame:
frame.f_trace = wdbr_thread.trace_dispatch
frame = frame.f_back
wdbr_thread.stoplineno = -1
def trace(frame, event, arg):
rv = wdbr_thread.trace_dispatch(frame, event, arg)
fn = frame.f_code.co_filename
if (rv is None and not
(fn == os.path.abspath(fn) or fn.startswith('<')) and not
fn.startswith(
os.path.dirname(os.path.abspath(sys.argv[0])))):
return
return trace
sys.settrace(trace)
return wdbr_thread.trace_dispatch
threading.settrace(init_new_wdbr)
# Multiprocess support
# Monkey patch threading to have callback to kill thread debugger
old_process_start = multiprocessing.Process.start
def wdb_process_start(self):
"""Monkey patched start monkey patching run"""
self.old_run = self.run
def run(self):
"""Monkey patched run"""
try:
self.old_run()
finally:
if hasattr(self, '_wdbr'):
self._wdbr.die()
from wdb._compat import bind
self.run = bind(self, run)
old_process_start(self)
multiprocessing.Process.start = wdb_process_start
# Monkey patching fork
osfork = os.fork
def tracing_fork():
import sys
#.........这里部分代码省略.........