linux 下调试 python,命令行调试python脚本

  1. 简介

    • 本质

      • python的一个模块.
    • 功能

      • 提供gdb有的基本功能.简洁版本.
      • 支持断点设置,跳转,查看堆栈,查看变量和表达式等.
      • gdb一样是交互式,promptpdb.
    • 三种方式

      • python交互式中使用

        >>> import pdb
        >>> def test():
        ...     pdb.set_trace()
        ...     a = 1
        ...     return a
        >>> pdb.run('test()')
        > <string>(1)<module>()->None
        (Pdb) c
        > <stdin>(3)test()
        (Pdb) n
        > <stdin>(4)test()
        (Pdb) bt
         <stdin>(1)<module>()->None
         d:\program\python38\lib\pdb.py(1596)run()
        -> Pdb().run(statement, globals, locals)
         d:\program\python38\lib\bdb.py(580)run()
        -> exec(cmd, globals, locals)
         <string>(1)<module>()->None
        > <stdin>(4)test()
        (Pdb) list
        [EOF]
        (Pdb) p a
        1
        (Pdb)
        
      • 脚本式执行

        import pdb
        def Test():
           pdb.set_trace()
           a=0
           b=1
           c=2
        
        Test()
        

        • 调用python test.py
        • pdb.set_trace()是设置断点,执行就直接挺到这一行,并启动交互式gdb.
        • 执行结果

        D:\code\py\debug>python test.py
        > d:\code\py\debug\test.py(4)Test()
        -> a=0
        (Pdb) n
        > d:\code\py\debug\test.py(5)Test()
        -> b=1
        (Pdb) p a
        0
        (Pdb) n
        > d:\code\py\debug\test.py(6)Test()
        -> c=2
        (Pdb) p b
        1
        (Pdb) n
        --Return--
        > d:\code\py\debug\test.py(6)Test()->None
        -> c=2
        (Pdb) p c
        2
        (Pdb)
        
      • 从头开始调试

        • 同样的代码,执行参数不同而已.

        D:\code\py\debug>python -m pdb test.py
        > d:\code\py\debug\test.py(1)<module>()
        -> import pdb
        (Pdb) n
        > d:\code\py\debug\test.py(2)<module>()
        -> def Test():
        (Pdb) n
        > d:\code\py\debug\test.py(8)<module>()
        -> Test()
        (Pdb) s
        --Call--
        > d:\code\py\debug\test.py(2)Test()
        -> def Test():
        (Pdb) n
        > d:\code\py\debug\test.py(3)Test()
        -> pdb.set_trace()
        (Pdb) n
        > d:\code\py\debug\test.py(4)Test()
        -> a=0
        (Pdb) n
        > d:\code\py\debug\test.py(5)Test()
        -> b=1
        (Pdb) n
        > d:\code\py\debug\test.py(6)Test()
        -> c=2
        (Pdb)
        
    • pdb函数

      • pdb.set_trace(*, header=None)

        • header是字符串,在进入调试模式前输出.
        • 一般用于设置静态断点.
      • pdb.runeval(expression, globals=None, locals=None)

        • 调试python表达式.
        • 并设置globals,locals等信息.
      • pdb.runcall(function, *args, **kwds)

        • 调试函数.
    • 新版本

      • 新版本不用import pdb; pdb.set_trace()这种方式设置静态断点了.
      • 使用内置函数breakpoint()设置静态断点.就不用import pdb.
  2. 指令

    • 指令识别

      • pdb识别的,则当成调试指令执行.
      • 不识别的,则当成python脚本执行.这种情况下,即使出错,也不会影响pdb.
    • 指令简介

      • 支持简写.
      • 空白行表示执行上一条指令.
    • 静态配置

      • ~/或当前路径存在.pdbrc结尾的会读入并执行.
    • 指令帮助

      • h(elp) [command]

        • h,help表示查看所有支持的指令.
        • h command,help command则输出对应的文档.
    • 堆栈操作

      • 查看堆栈

        • w(here),bt
        • 输出堆栈,输出最后一行是当前的栈帧.
      • 向下移动栈帧

        • d(own) [count]
        • count层数,默认1.
      • 向上移动栈帧

        • u(p) [count]
        • 向上移动栈帧,默认1,可指定count.
    • 断点操作

      • 设置断点

        • b(reak) [([filename:]lineno | function) [, condition]]
        • 指定位置设置断点,或指定函数设置断点.
        • condition可以设置条件断点.
        • 没有文件则表示当前文件,function则表示对应文件下的函数.
        • 文件通过sys.path路径搜索.
      • 查看断点

        • b(reak).
        • 即无参.
      • 设置一次性断点

        • tbreak [([filename:]lineno | function) [, condition]]
        • 和上面的断点一样的设置.
        • 只是一次性的而已,查看也用b(reak)查看.
      • 删除断点

        • cl(ear) [filename:lineno | bpnumber ...]
        • 无参删除所有.
        • 有参则删除指定位置的.
        • 或指定编号的.编号通过b(reak)查看.
      • 禁用断点

        • disable [bpnumber ...]
        • 按照编号禁用断点.
      • 启用断点

        • enable [bpnumber ...]
        • 启用指定编号的断点,和禁用相反的操作.
      • 修改断点:断点n次后启用

        • ignore bpnumber [count]
        • 给指定编号断点设置忽略次数.
        • 即断点计数,断点过了count次后才触发.
        • 默认0
      • 修改断点:给断点设置条件

        • condition bpnumber [condition]
        • 修改指定编号的断点,表达式为真才触发.
      • 修改断点:给断点添加触发指令

        • commands [bpnumber]
        • 没有bpnumber则表示上一个断点设置.
        • 可以设置多个指令,以end结束.
        • continue, step, next, return, jump, quit不能设置.
    • 跳转

      • 跳转到函数

        • s(tep)
        • 跳到函数并停止.
      • 下一条

        • n(ext)
        • 执行下一条指令.
      • 指定位置停

        • unt(il) [lineno]
        • 没有lineno执行下一行.
        • 有则执行到指定位置才停止.
        • lineno要大于等于当前.
      • 继续执行

        • c(ont(inue))
        • 一直执行,直到断点.
    • 代码相关

      • 查看代码

        • l(ist) [first[, last]]
        • 默认11行,一直往下输出.
        • 有则是区间,没有last则是first+11.
      • 查看当前栈帧代码

        • ll | longlist
    • 变量

      • 查看函数参数

        • a(rgs)查看当前函数.
      • 查看表达式

        • p expression简易版输出print.
        • pp expression格式化输出.
      • 查看类型

        • whatis expression
        • 查看表达式类型.
      • 查看函数源代码

        • source expression
        • 查看函数的
    • 执行python代码

      • !python_code
      • 还有一种方式是前面提到过:只要是debugger不识别的指令,都会当成python代码执行.
    • 启动和退出相关

      • 重新执行

        • run [args ...] | restart [args ...],指定参数重启.
      • 退出

        • q(uit)
      • 获取函数返回值

        • retval
        • 输出上一个返回值.

Supongo que te gusta

Origin blog.csdn.net/rubikchen/article/details/119950614
Recomendado
Clasificación