相当于壳牌公司;集合-x";对于python
在Linux上,是否有python脚本的调试工具,可以在执行代码行之前打印代码行,类似于shell脚本中的“set-x”指令 我知道调试pdb模块,但我不知道它可以做到这一点(stacktrace不适用)。 我知道strace,但它不进行这种级别的调试 例如:相当于壳牌公司;集合-x";对于python,python,linux,Python,Linux,在Linux上,是否有python脚本的调试工具,可以在执行代码行之前打印代码行,类似于shell脚本中的“set-x”指令 我知道调试pdb模块,但我不知道它可以做到这一点(stacktrace不适用)。 我知道strace,但它不进行这种级别的调试 例如: def step_1(): print("some step 1...") return 123 def step_2(some_value): print("some step 2... %s" % (some
def step_1():
print("some step 1...")
return 123
def step_2(some_value):
print("some step 2... %s" % (some_value) )
return "abc"
# main
x = step_1()
y = step_2(x)
使用我正在寻找的假设调试工具执行:
$ python t.py
+ step_1()
+ print("some step 1...")
some step 1...
+ x = 123
+ step_2(123)
+ print("some step 2... %s" % (123) )
some step 2... 123
+ y = "abc"
调试器经常出于类似目的使用的,可用于实现此类功能。以下是一个最小的示例,您可以根据自己的需要进行调整:
import sys
import inspect
this_module = sys.modules['__main__']
source_lines = inspect.getsource(this_module).splitlines()
def mytrace(frame, event, arg):
if source_lines and event in {'line', 'call', 'return'}:
line = source_lines[frame.f_lineno].strip()
print('+', line)
return mytrace
sys.settrace(mytrace)
def step_1():
print("some step 1...")
return 123
def step_2(some_value):
print("some step 2... %s" % (some_value) )
return "abc"
# main
x = step_1()
y = step_2(x)
由于Python不是bash,而且执行模型不同,因此您可能无法获得与shell脚本中的
set-x
完全相同的输出(例如,在Python上下文中,带有literal右值的行+y=“abc”
)但是,通过与传递到跟踪的帧
对象交互,您应该能够重新创建足够相似的内容,以满足您的需要。导入pdb;pdb.set_trace()
试试itpdb.set_trace()立即中断。但是我想让我的脚本一路单独运行,只打印调试信息。它停止执行,当它停止时,按n
,你会逐行检查代码。你想在执行之前打印即将执行的代码行吗?如果是这样,stacktrace不正是你需要的吗?