python的linux的调试_linux调试python - CSDN
  • linuxpython调试方法

    2019-01-24 18:47:01
     http://docs.python.org/library/pdb.html 和 (pdb)help ...python -m pdb myscript.py 常用命令说明:  l #查看运行到哪行代码  n #单步运行,跳过函数  s #单步运行,可进入函数  p ...

    参考:https://www.cnblogs.com/jingzhishen/p/3493991.html

               http://docs.python.org/library/pdb.html 和 (pdb)help

    python -m pdb myscript.py

    常用命令说明: 
    l #查看运行到哪行代码 
    n #单步运行,跳过函数 
    s #单步运行,可进入函数 
    p 变量 #查看变量值 
    b 行号 #断点设置到第几行 
    b #显示所有断点列表 
    cl 断点号 #删除某个断点 
    cl #删除所有断点 
    c #跳到下一个断点 
    r #return当前函数 
    exit #退出

    展开全文
  • linux下调试python

    2019-09-28 13:37:44
    python支持pdb调试,方法如下: 1.打开终端 2.输入以下命令即可调试,启动后会自动跳转到第一行: python -m pdb test.py 调试命令总结如下: c: 继续,即continue,该命令可以让程序继续运行直至下个断点或运行...

    python支持pdb调试,方法如下:
    1.打开终端
    2.输入以下命令即可调试,启动后会自动跳转到第一行:

     python -m pdb test.py

    调试命令总结如下:
    c:  继续,即continue,该命令可以让程序继续运行直至下个断点或运行完
    b:  断点,即break,输入b 5,会在第5行打断点,输入b会显示所有断点
    cl: 删除断点,输入cl 2会删除第2个断点
    l:   代码上下文,即list,会输出当前调试行的上下文
    p:  打印变量,即print,输入 print value,会输出变量value的值
    n:  下一行,即Next,单步调试
    j:   跳转,即jump,输入j 10 会跳转到第10行
    s:  进入,即step,会进入当前函数
    r:  返回,即return,退出当前函数
    a: 堆栈,查看当前堆栈变量
    h: 帮助
    q: 退出

    展开全文
  • 想让python也能想C一样的编译调试吗?其实很简单,python自带类似gdb的pdb库,可以实现简单的调试功能,调试命令与gdb相似,只是功能没有gdb那么强大。import numpy as np A=np.array([[0.5,0.2,0.3],[0.3,0.5,0.2],...

    想让python也能想C一样的编译调试吗?其实很简单,python自带类似gdb的pdb库,可以实现简单的调试功能,调试命令与gdb相似,只是功能没有gdb那么强大。

    import numpy as np
    A=np.array([[0.5,0.2,0.3],[0.3,0.5,0.2],[0.2,0.3,0.5]])
    B=np.array([[0.5,0.5],[0.4,0.6],[0.7,0.3]])
    pi=np.array([0.2,0.4,0.4])
    O=[0,1,0]
    alpha=np.zeros((A.shape[0],len(O)))
    for i in range(0,alpha.shape[0]):
            alpha[i][O[0]]=pi[i]*B[i][O[0]]
    for n in range(1,len(O)):
            for i in range(0,alpha.shape[0]):
                    alpha[i][O[n]]=sum(alpha[j][n-1] for j in range(0,alpha.shap    e[0]))*B[i][O[n]]
    print sum(alpha[i][len(O)] for i in range(0,A.shape[0]))
    
    • pdb调试

      • python -m pdb test.py
      • l–>查看代码
        这里写图片描述

      • b 8–>在第八行设置断点

      • r–>运行到断点处
        这里写图片描述
      • n –>执行下一步
      • p i–>查看变量i 的值
        这里写图片描述
    • gdb常用的指令

      • h(elp) [comman] #打印可用指令及帮助信息
      • r(eturn) #运行代码直到下一个断点或当前函数返回
      • b(reak) [[filename:]lineno | function[, condition]] #指定文件某行或函数体来设置断点
      • l(ist) [first[, last]] #查看指定代码段
      • n(ext) #执行下一行
      • s(tep) #执行下一行,若为函数则进入函数体
      • p #打印某个变量
      • a(rgs) #打印当前函数的参数
      • w(here) #打印堆栈信息
      • d(own) #移至下层堆栈
      • u(p) #移至上层堆栈
      • j(ump) #跳转到指定行
      • continue / c #继续执行
      • disable [bpnumber [bpnumber]] #失效断点
      • enable[bpnumber [bpnumber]] #启用断点
      • cl(ear) [filename:lineno | bpnumber [bpnumber]] #删除断点
      • q(uit)/exit #中止调试并退出
    展开全文
  • python linux 调试

    千次阅读 2015-04-14 14:29:09
    使用gdb调试Python进程 有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump。例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭出gdb了...

    使用 PDB 调试

    python -m pdb 1.py

    -m 的话,就会默认断在第一行代码

    • h(elp),会打印当前版本Pdb可用的命令,如果要查询某个命令,可以输入 h [command],例如:“h l” — 查看list命令
    • l(ist),可以列出当前将要运行的代码块

    (Pdb) l
    497 pdb.set_trace()
    498 base_data = {}
    499 new_data = {}
    500 try:
    501 execfile(base_file_name,{},base_data)
    502 -> execfile(new_file_name,{},new_data)
    503 except:
    504 logger.writeLog(“error! load result log error!”)
    505 print “load cmp logs error!”
    506 raise Exception, “load cmp logs error!”
    507

    >断点设置
       (Pdb)b  10 #断点设置在本py的第10行
       或(Pdb)b  ots.py:20 #断点设置到 ots.py第20行
       删除断点(Pdb)b #查看断点编号
                (Pdb)cl 2 #删除第2个断点
        
    >运行
        (Pdb)n #单步运行
        (Pdb)s #细点运行 也就是会下到,方法
        (Pdb)c #跳到下个断点
    >查看
        (Pdb)p param #查看当前 变量值
        (Pdb)l #查看运行到某处代码
        (Pdb)a #查看全部栈内变量

    • b(reak), 设置断点,例如 “b 77″,就是在当前脚本的77行打上断点,还能输入函数名作为参数,断点就打到具体的函数入口,如果只敲b,会显示现有的全部断点

    (Pdb) b 504
    Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504

    • condition bpnumber [condition],设置条件断点,下面语句就是对第4个断点加上条件“a==3”

    (Pdb) condition 4 a==3
    (Pdb) b
    Num Type Disp Enb Where
    4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504
    stop only if a==3

    • cl(ear),如果后面带有参数,就是清除指定的断点(我在Python2.4上从来没成功过!!!);如果不带参数就是清除所有的断点

    (Pdb) cl
    Clear all breaks? y

    • disable/enable,禁用/激活断点

    (Pdb) disable 3
    (Pdb) b
    Num Type Disp Enb Where
    3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505

    • n(ext),让程序运行下一行,如果当前语句有一个函数调用,用n是不会进入被调用的函数体中的
    • s(tep),跟n相似,但是如果当前有一个函数调用,那么s会进入被调用的函数体中
    • c(ont(inue)),让程序正常运行,直到遇到断点
    • j(ump),让程序跳转到指定的行数

    (Pdb) j 497
    > /home/jchen/regression/regressionLogCMP.py(497)compareLog()
    -> pdb.set_trace()

    • a(rgs),打印当前函数的参数

    (Pdb) a
    _logger =
    _base = ./base/MRM-8137.log
    _new = ./new/MRM-8137.log
    _caseid = 5550001
    _toStepNum = 10
    _cmpMap = {‘_bcmpbinarylog’: ‘True’, ‘_bcmpLog’: ‘True’, ‘_bcmpresp’: ‘True’}

    • p,最有用的命令之一,打印某个变量

    (Pdb) p _new
    u’./new/MRM-8137.log’

    • !,感叹号后面跟着语句,可以直接改变某个变量
    • q(uit),退出调试

    使用gdb调试Python进程

    准备

    1. 确认你的gdb版本是>=7,gdb从版本7开始支持对Python的debug

    2.确认gdb连接的Python是所要debug的Python,否则请重新编译gdb。

    方法:

    1
    2
    3
    4
    5
    6
    7
    $ gdb
    (gdb) python
    > import sys
    >print sys.version
    >end
    2.4.3 ( #1, Sep 21 2011, 19:55:41) 
    [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)]

    在一些追求稳定的发行版(例如CentOS),Python的版本会较低,这时都会自己编译一个Python使用。而从源里安装的gdb会连接源里Python的版本。例如在CentOS 5.4,源里的Python是2.4.3,从源安装的gdb也会连接到Python 2.4.3。


    使用 GDB

    有两种可行的方法:

    1. 一开始就使用 gdb 来启动应用
    2. 连接到一个已经运行的 Python 进程

    gdb 下面启动 Python 同样有两种方式:

    交互式:

    $ gdb python
    ...
    (gdb) run <programname>.py <arguments>
    

    自动:

    $ gdb -ex r --args python <programname>.py <arguments>
    

    这样的话,它会一直运行直到退出、段错误、或者人为的停止(使用 Ctrl+C)。

    如果进程已经开始运行,你可以通过 PID 来接入它:

    $ gdb python <pid of running process>
    

    调试进程

    如果你的程序段错误了, gdb 会自动暂停程序,这样你可以切换到 gdb命令行来检查状态。你也可以人为地使用Ctrl+C 来暂停程序运行。

    查看 EasierPythonDebugging获得 gdb 里面的 Python 命令列表。

    查看 C 调用栈

    如果你在 debug 段错误,你最想做的可能就是查看 C 调用栈。

    gdb 的命令行里面,只要运行一下命令:

    (gdb) bt
    #0  0x0000002a95b3b705 in raise () from /lib/libc.so.6
    #1  0x0000002a95b3ce8e in abort () from /lib/libc.so.6
    #2  0x00000000004c164f in posix_abort (self=0x0, noargs=0x0)
        at ../Modules/posixmodule.c:7158
    #3  0x0000000000489fac in call_function (pp_stack=0x7fbffff110, oparg=0)
        at ../Python/ceval.c:3531
    #4  0x0000000000485fc2 in PyEval_EvalFrame (f=0x66ccd8)
        at ../Python/ceval.c:2163
    ...
    

    运气好的话,你可以直接看到问题出现在什么地方。如果它提供的信息不能直接帮你解决问题,你可以尝试继续追踪调用栈。调式的结果取决于 debug 信息的有效程度。

    查看 Python 调用栈

    如果你安装了 Python 扩展,你可以使用

    (gdb) py-bt
    

    可以获取熟悉的 Python 源代码。

    对挂住的进程开刀

    如果一个进程看上去挂住了,他可能在等待什么东西(比如锁、IO 等等)。也有可能在拼命的跑循环。连接上这个进程,然后检查调用栈也许可以帮上忙。

    如果进程在疯狂循环,你可以先让它运行一会,使用 cont 命令,然后使用 Ctrl+C 来暂停,并且打印出调用栈。

    如果一些线程卡住了,下面的命令可能会帮上忙:

    (gdb) info threads
      Id   Target Id         Frame
      37   Thread 0xa29feb40 (LWP 17914) "NotificationThr" 0xb7fdd424 in __kernel_vsyscall ()
      36   Thread 0xa03fcb40 (LWP 17913) "python2.7" 0xb7fdd424 in __kernel_vsyscall ()
      35   Thread 0xa0bfdb40 (LWP 17911) "QProcessManager" 0xb7fdd424 in __kernel_vsyscall ()
      34   Thread 0xa13feb40 (LWP 17910) "python2.7" 0xb7fdd424 in __kernel_vsyscall ()
      33   Thread 0xa1bffb40 (LWP 17909) "python2.7" 0xb7fdd424 in __kernel_vsyscall ()
      31   Thread 0xa31ffb40 (LWP 17907) "QFileInfoGather" 0xb7fdd424 in __kernel_vsyscall ()
      30   Thread 0xa3fdfb40 (LWP 17906) "QInotifyFileSys" 0xb7fdd424 in __kernel_vsyscall ()
      29   Thread 0xa481cb40 (LWP 17905) "QFileInfoGather" 0xb7fdd424 in __kernel_vsyscall ()
      7    Thread 0xa508db40 (LWP 17883) "QThread" 0xb7fdd424 in __kernel_vsyscall ()
      6    Thread 0xa5cebb40 (LWP 17882) "python2.7" 0xb7fdd424 in __kernel_vsyscall ()
      5    Thread 0xa660cb40 (LWP 17881) "python2.7" 0xb7fdd424 in __kernel_vsyscall ()
      3    Thread 0xabdffb40 (LWP 17876) "gdbus" 0xb7fdd424 in __kernel_vsyscall ()
      2    Thread 0xac7b7b40 (LWP 17875) "dconf worker" 0xb7fdd424 in __kernel_vsyscall ()
    * 1    Thread 0xb7d876c0 (LWP 17863) "python2.7" 0xb7fdd424 in __kernel_vsyscall ()
    

    当前运行的线程被标记为 *,要查看 Python 代码运行到哪里,使用 py-list 查看:

    (gdb) py-list
    2025        # Open external files with our Mac app
    2026        if sys.platform == "darwin" and 'Spyder.app' in __file__:
    2027            main.connect(app, SIGNAL('open_external_file(QString)'),
    2028                         lambda fname: main.open_external_file(fname))
    2029
    >2030        app.exec_()
    2031        return main
    2032
    2033
    2034    def __remove_temp_session():
    2035        if osp.isfile(TEMP_SESSION_PATH):
    

    查看所有进程的 Python 代码位置,可以使用:

    (gdb) thread apply all py-list
    ...
     200
     201        def accept(self):
    >202            sock, addr = self._sock.accept()
     203            return _socketobject(_sock=sock), addr
     204        accept.__doc__ = _realsocket.accept.__doc__
     205
     206        def dup(self):
     207            """dup() -> socket object
    
    Thread 35 (Thread 0xa0bfdb40 (LWP 17911)):
    Unable to locate python frame
    
    Thread 34 (Thread 0xa13feb40 (LWP 17910)):
     197            for method in _delegate_methods:
     198                setattr(self, method, dummy)
     199        close.__doc__ = _realsocket.close.__doc__
     200
     201        def accept(self):
    >202            sock, addr = self._sock.accept()
     203            return _socketobject(_sock=sock), addr
    ...
    

    引用

    老系统上的 GDB

    有时候你需要在老系统上面安装 gdb,这时候你可能需要下列信息:

    GDB Macros

    一些随着 Python 发布的 GDB 脚本可以用来调试 Python 进程。你可以把 Python 源码里面的 Misc/gdbinit 拷贝到~/.gdbinit,或者从Subversion来拷贝他们。请注意你的 Python,确保使用正确的代码版本,否则有些功能可能无法工作。

    请注意有些新的 GDB 命令只有在 debug 需要的库存在才能正常工作。

    这个脚本在 Ubuntu 上面的 gcc 4.5.2 工作时,会爆出错误No symbol "co" in current context.,是因为call_functionPyEval_EvalFrameExPyEval_EvalCodeEx 之间。重新使用make "CFLAGS=-g -fno-inline -fno-strict-aliasing"编译 Python 可以解决这个问题。

    使用 Python Stack Traces GDB 脚本

    在 gdb 命令行里,可以这样查看 Python stack trace:

    (gdb) pystack
    

    同样的,可以获取一列 stack frame 的 Python 变量:

    (gdb) pystackv
    

    更多 gdbinit 里面没定义的有用的脚本可以在这里找到:

    http://web.archive.org/web/20070915134837/http://www.mashebali.com/?Python_GDB_macros:The_Macros


    展开全文
  • 但是,有时我们的业务场景,限制只能在 Linux 命令行模式进行调试。 这时该怎么办呢? 今天,就给大家介绍一个 Linux 下调试 Python 程序的工具。 pdb简介 pdb 调试器是 Python 标准库提供的,因此最为方便,不需要...
  • linuxpython调试

    千次阅读 2016-09-07 17:06:08
    之前一直在window下写python脚本,习惯用eclipse调试编辑,突然换到在linux环境下,有点不适应。。。 python有自带的pdb库,可以实现简单的调试功能,基本命令与gdb类似,不过功能不会有gdb那么强大,pdb主要支持多...
  • linuxpython调试

    2016-07-04 10:51:08
    pythonlinux调试 python是动态语言,编译器检查不到运行时的语法问题,而这些低级问题常常造成调试效率很低。之前在linux服务器上调试,都是通过print和异常报错来排查,简直弱爆了。python内置的pdb正是调试的...
  • 之前一直在window下写python脚本,习惯用eclipse调试编辑,突然换到在linux环境下,有点不适应。。。 python有自带的pdb库,可以实现简单的调试功能,基本命令与gdb类似,不过功能不会有gdb那么强大,pdb主要支持多...
  • Linux下使用命令行调试Python程序

    万次阅读 2016-08-15 15:44:26
    Python提供类似于C++ gdb的调试工具pdb,我们可以在Linux下使用pdb在命令行下进行Python程序的调试。 官方参考网站: Python2: https://docs.python.org/2/library/pdb.html Python3: ...
  • 2、python 环境单点运行调试自己pyhon 调试步骤 首先你选择运行的 py 或服务程序的入口py python -m pdb test.py (Pdb) 会自动停在第一行,等待调试,这时你可以看看 帮助 (Pdb) h 说明下这几个关键 命令 断点设置 ...
  • linux 安装vscode调试python

    千次阅读 2019-04-11 21:54:38
    1.下载 vscode安装包 .tar.gz ...mv VSCode-linux-x64 /usr/local/ 4.可能还需要给可执行的权限, 然后就已经可以运行了 chmod +x /usr/local/VSCode-linux-x64/code 5.复制一个VScode图标文件到 /usr/sh...
  • Py't'hon语言与Linux系统管理 Py't'hon生态工具 打造命令行工具 文本处理 Linux系统管理 使用python监控Linux系统 文档与报告 网络 Python自动化部署 深入浅出Ansible 使用Python打造Mysql专家系统 启动简易下载器:...
  • 单步调试Python 在合适的地方加上 如下语句,添加端点 import pdb pdb.set_trace() 启动程序,加上调试参数 -m pdb 进入调试模式后,通过如下命令进行调试(模式有点向gdb了,在命令行下操作) l :显示当前运行...
  • 1. 1秒钟启动一个下载服务器在... python 一行试解析jsonecho '{"job": "developer", "name": "lmx", "sex": "male"}' | python -m json.tool
  • linux环境下python的pdb调试方法

    千次阅读 2016-03-03 17:10:52
    python有自带的pdb库,可以实现简单的调试功能,基本命令与gdb类似,不过功能不会有gdb那么强大,pdb主要支持多断点设置(可条件设置),代码级单步调试,查看堆栈信息,代码查看。命令行启动目标程序,加上-m参数,...
  • 最近打算开始学习期待已久的python,由于以前写代码都是vim+gcc(主要是写c代码),所以想尝试一下用集成开发环境。广受欢迎的开源eclipse自然成了我的不二选择,我的系统是ubuntu12,下面我们便开始搭建环境! 1.首先...
  • Python 调试工具 PDB(Linux 环境下调试)

    千次阅读 2016-11-28 13:57:23
    转载:... 在python中使用pdb模块可以进行调试 import pdb pdb.set_trace() 也可以使用python -m pdb mysqcript.py这样的方式 (Pdb) 会自动停在第一行,等待调试,这时你可以看看 帮助
  • PythonLinux下调试

    2014-08-14 10:29:55
    一般Linux下调试Python直接用print或者log来看日志确定问题,dang
  • linux调试python

    千次阅读 2012-11-15 22:38:41
    python linux调试  python是动态语言,编译器检查不到运行时的语法问题,而这些低级问题常常造成调试效率很低。之前在linux服务器上调试,都是通过print和异常报错来排查,简直弱爆了。python内置的pdb正是...
  • Linux下使用终端调试Python程序:pudb

    千次阅读 2019-07-14 15:25:56
    Python自带调试程序pdb,pdb有点像gdb,强大,但不够好用。 根据别人的推荐:Suggestions for Python debugging tools? - Stack Overflow 我选择了pudb。 pudb是一个命令行的GUI调试程序,需要先安装: pip install ...
1 2 3 4 5 ... 20
收藏数 61,247
精华内容 24,498
关键字:

python的linux的调试