【问题标题】:How can I make Perl and Python print each line of the program being executed?如何让 Perl 和 Python 打印正在执行的程序的每一行?
【发布时间】:2025-11-21 19:35:01
【问题描述】:

我知道bash -x script.sh 将在实际执行之前执行脚本打印每一行。 如何让 Perl 和 Python 解释器做同样的事情?

【问题讨论】:

    标签: python bash perl debugging trace


    【解决方案1】:

    Devel::Trace 是 Perl 的类似物,trace module 是 Python 的。

    【讨论】:

    • 澄清:分别为perl -d:Trace program.plpython -m trace -t program.py
    • @Vi.+1 用于 Devel::Trace 的命令行选项。 FWIW:要在 apache mod_perl 下启用 perl 调试,请参见以下链接:perlmonks.org/?node_id=412121。没试过,但可能对其他人有帮助。
    【解决方案2】:

    python -m trace -t main.py

    测试程序:

    main.py

    from a import g
    def f(i):
        g(i)
    for i in range(3):
        f(i)
    

    a.py

    def g(i):
        print i
    

    输出:

     --- modulename: main, funcname: <module>
    main.py(1): from a import g
     --- modulename: a, funcname: <module>
    a.py(1): def g(i):
    main.py(2): def f(i):
    main.py(4): for i in range(3):
    main.py(5):     f(i)
     --- modulename: main, funcname: f
    main.py(3):     g(i)
     --- modulename: a, funcname: g
    a.py(2):     print i
    0
    main.py(4): for i in range(3):
    main.py(5):     f(i)
     --- modulename: main, funcname: f
    main.py(3):     g(i)
     --- modulename: a, funcname: g
    a.py(2):     print i
    1
    main.py(4): for i in range(3):
    main.py(5):     f(i)
     --- modulename: main, funcname: f
    main.py(3):     g(i)
     --- modulename: a, funcname: g
    a.py(2):     print i
    2
    main.py(4): for i in range(3):
     --- modulename: trace, funcname: _unsettrace
    trace.py(80):         sys.settrace(None)
    

    在 Ubuntu 16.10、Python 2.7.12 上测试。

    【讨论】:

    • 这对于问题的其他答案似乎是多余的。
    • @duskwuff 感谢您的反馈。它节省了单击并发现您需要-t,并显示了您在最小的多文件示例中获得的结果。
    【解决方案3】:

    Devel::DumpTrace 于 2011 年发布,比 Devel::Trace 具有更多功能,例如在跟踪输出中评估变量值。

    【讨论】:

      最近更新 更多