我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux下怎么调试python代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux下怎么调试python代码

本篇内容介绍了“Linux下怎么调试python代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Linux下怎么调试python代码

Linux下调试pytho代码具体方法

日志

是的,的确,不得不强调足够的日志记录对应用程序是多么的重要。您应该记录重要的东西,如果你的记录足够好的话,你可以从日志中找出问题从而节省大量的时间。

如果你曾经用print语句来调试代码现在停下吧,用logging.debug替代,开始可以慢慢来,以后完全禁用它…

追踪  有时看到程序如何被执行会很有帮助。你可以使用IDE的调试共轭ngn一步一步的运行程序,但你需要知道你要找的是什么,否则这将会是一个漫长的过程。 标准库中有一个 trace模块,可以打印所有执行过程中的内容(像制作 覆盖率报告)。

 python -mtrace --trace script.py

这将产生大量输出(每个行会被打印输出,所以你最好通过管道,用grep只看自己感兴趣的部分),例如:

 python -mtrace --trace script.py | ``egrep` `'^(mod1.py|mod2.py)'``-

如果你喜欢新特性,那么你可以尝试 smiley – 它可以显示变量内容变化,还可以用它来远程追踪程序。

PDB

 import pdb pdb.set_trace() # opens up pdb prompt

或者:

 try:   code   that   fails except:   import pdb   pdb.pm() # or pdb.post_mortem()

或(按键盘C键启动脚本):

 python -mpdb script.py

像在REPL中那样:

  •  c or continue

  •  q or quit

  •  l or list, 在当前界面显示源码

  •  w or where, 显示回溯

  •  d or down, 显示回溯的下一界面

  •  u or up, 显示回溯的上一界面

  • , 重复最后一个命令

  •  其他任何东西,在当前界面评估源码 (t还有其他的一些命令)

  • corcontinue

  • qorquit

  • lorlist,显示在当前帧的源

  • worwhere,显示回溯

  • dordown,下山1帧回溯

  • uorup,上升1帧回溯

  • 回车,重复最后一个命令

几乎任何东西,评估当前帧的Python代码(还有其他几个命令)

可以替代pdb的:

  •  ipdb (easy_install ipdb) – 像 ipython (自动补齐, 颜色等)

  •  pudb (easy_install pudb) – 基于curses (类gui), 浏览源码有很好的表现。

远程 PDB

 sudo` `apt-get ``install` `winpdb

替代 pdb.set_trace():

 import rpdb2 rpdb2.start_embedded_debugger("secretpassword")

现在运行Winpdb , 输入密码 到 File > Attach。 不喜欢 Winpdb ? 只要通过 TCP运行 PDB

使用下面代码:

 import loggging    class Rdb(pdb.Pdb):   """   This will run pdb as a ephemeral telnet service. Once you connect no one   else can connect. On construction this object will block execution till a   client has connected.      Based on https://github.com/tamentis/rpdb I think ...      To use this::        Rdb(4444).set_trace()      Then run: telnet 127.0.0.1 4444   """   def __init__(self, port=0):     self.old_stdout = sys.stdout     self.old_stdin = sys.stdin     self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     self.listen_socket.bind(('0.0.0.0', port))     if not port:       logging.critical("PDB remote session open on: %s", self.listen_socket.getsockname())       print >> sys.__stderr__, "PDB remote session open on:", self.listen_socket.getsockname()       sys.stderr.flush()     self.listen_socket.listen(1)     self.connected_socket, address = self.listen_socket.accept()     self.handle = self.connected_socket.makefile('rw')     pdb.Pdb.__init__(self, completekey='tab', stdin=self.handle, stdout=self.handle)     sys.stdout = sys.stdin = self.handle      def do_continue(self, arg):     sys.stdout = self.old_stdout     sys.stdin = self.old_stdin     self.handle.close()     self.connected_socket.close()     self.listen_socket.close()     self.set_continue()     return 1      do_c = do_cont = do_continue    def set_trace():   """   Opens a remote PDB on first available port.   """   rdb = Rdb()   rdb.set_trace()

显示详细信息

想要 REPL ? IPython 怎么样?

如果你不需要一个整体的调试器,只要启动IPython用下面的代码:

 import IPython IPython.embed()

标准Linux工具

他们未被充分利用很令我惊讶。通过这些工具集你能弄清楚诸如这些的很多问题:从性能问题(太多的系统调用,内存分配等)到死锁,网络,磁盘等问题。

 sudo apt-get install htop sudo htop

最有用的是降权运行strace,只需运行速冻 strace -P 12345 或strace-f 命令参数(-f表示strace分支进程)。 通常有很多的输出,你最好将输出重定向输出到一个文件(命令后添加 &> 文件名)来进行更深入的分析。

然后就是ltrace,它和strace相似不过是通过库调用的,参数基本相同。 lsof可以提供 你看过ltrace/ strace的处理号,这样使用:lsof -P 12345

让跟踪更深点

它很容易使用以及可以做很多事,前提是大家都已经安装了htop!

现在,找你所想的进程,仅仅需要按:

  •  s 显示系统调用跟踪(strace)

  •  L 显示库调用跟踪(ltrace)

  •  l  显示lsof

监视

没有更好的替代品了,服务器持续监视,你曾经是否发现自己使用奇奇怪怪的跟踪方法去找出为什么哪里慢了以及资源怎么被消耗了,那么不要再被iotop, iftop, htop, iostat, vmstat等等烦扰了,赶快使用dstat吧,它可以做大多数上述的提到的工具能做的,而且可以做得更好!

它会以紧凑,时尚的代码着色(亲,不像iostat, vmstat哟)持续显示你的数据,而且你可以一直看到以往的数据(与iftop, iotop, htop不同哟)。

仅仅运行这个:

 dstat --cpu --io --mem --net --load --fs --vm --disk-util --disk-tps --freespace --swap --``top``-io --``top``-bio-adv

还有一点就是这里还有更简单的方式来写哟,如shell历史记录(shell history)或则重命名命令(aliases)

GDB

这是一个相当复杂和强大的工具,但我仅仅涉及到基础的东西(设置和基本命令)。

 sudo apt-get install gdb python-dbg zcat /usr/share/doc/python2.7/gdbinit.gz > ~/.gdbinit run app with python2.7-dbg sudo gdb -p 12345

现在请使用:

 bt- 堆栈轨迹(C 级)  pystack- python 堆栈轨迹,前提是你需要拥有~/.gdbinit 并使用python-dbg  c(继续)

有出现 segfaults 么 ?用 faulthandler !

除了Python 3.3其他的都会出现这个可怕的错误, 回到Python 2.x

只要按照下面来做,你至少会找到一条导致段错误的原因。

 >>> ``import` `faulthandler``>>> faulthandler.enable()

内存泄露

好的,这里有许多工具,其中有一些是专门用于WSGI 应用的,像Dozer,但是我最喜欢的无疑是 objgraph。它是如此惊人的方便和易于使用。它没有与WSGI或任何其他东西继承,所以你需要找到你自己的方式来运行以下代码:

 >>> import objgraph >>> objs = objgraph.by_type("Request")[:15] >>> objgraph.show_backrefs(objs, max_depth=20, highlight=lambda v: v in objs, filename="/tmp/graph.png") Graph written to /tmp/objgraph-zbdM4z.dot (107 nodes) Image generated as /tmp/graph.png

你会得到一个像 这样的图表(警告:这个图表非常大)。你也会得到 dot输出。   内存利用

有时你想使用更少的内存。少分配内存通常会使程序运行的更快更好,用户们都喜欢精益求精:)

有许多工具可以拿来使用 [1] ,但在我看来最好的是pytracemalloc – 与其他工具相比较,它的开销很小(不需要依赖于削弱速度的 sys.settrace)并且它的输出非常详尽。令人头疼的是它的配置,因为需要你重编译python,但是spt使其很容易做到。

只要运行以下命令,然后你就可以去买午餐或者做其他事了:

 apt-get source python2.7 cd python2.7-* wget https://github.com/wyplay/pytracemalloc/raw/master/python2.7_track_free_list.patch patch -p1然后安装pytracemalloc(请注意:如果你是在虚拟环境中做的这些操作,那么在python重新安装后,你需要重建它-仅运行virtualenv myenv即可): pip ``install` `pytracemalloc现在,你就可以通过以下代码来封装你的应用程序: import tracemalloc, time tracemalloc.enable() top = tracemalloc.DisplayTop(   5000, # log the top 5000 locations   file=open('/tmp/memory-profile-%s' % time.time(), "w") ) top.show_lineno = True try:   # code that needs to be traced finally:   top.display()会得到像下面这样的输出: 2013-05-31 18:05:07: Top 5000 allocations per file and line #1: .../site-packages/billiard/_connection.py:198: size=1288 KiB, count=70 (+0), average=18 KiB #2: .../site-packages/billiard/_connection.py:199: size=1288 KiB, count=70 (+0), average=18 KiB #3: .../python2.7/importlib/__init__.py:37: size=459 KiB, count=5958 (+0), average=78 B #4: .../site-packages/amqp/transport.py:232: size=217 KiB, count=6960 (+0), average=32 B #5: .../site-packages/amqp/transport.py:231: size=206 KiB, count=8798 (+0), average=24 B #6: .../site-packages/amqp/serialization.py:210: size=199 KiB, count=822 (+0), average=248 B #7: .../lib/python2.7/socket.py:224: size=179 KiB, count=5947 (+0), average=30 B #8: .../celery/utils/term.py:89: size=172 KiB, count=1953 (+0), average=90 B #9: .../site-packages/kombu/connection.py:281: size=153 KiB, count=2400 (+0), average=65 B #10: .../site-packages/amqp/serialization.py:462: size=147 KiB, count=4704 (+0), average=32 B显示详细信息

“Linux下怎么调试python代码”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux下怎么调试python代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux下怎么调试python代码

本篇内容介绍了“Linux下怎么调试python代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux下调试pytho代码具体方法日志
2023-06-28

Linux下如何调试c++代码

这篇文章主要为大家展示了“Linux下如何调试c++代码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下如何调试c++代码”这篇文章吧。Linux下调试C++代码具体方法1.编写好代码
2023-06-28

python调试代码

我在看一些开源的python项目时,需要知道各个类各个函数之间的调用关系才能看懂代码,因此我写了个方法来跟踪代码的调用过程 import sys  from time import ctime  is_log=True  def log_m
2023-01-31

Linux环境下Ruby代码调试工具

在Linux环境下,有多种Ruby代码调试工具可供选择Byebug:Byebug是一个强大的Ruby调试器,它提供了丰富的功能,如设置断点、单步执行、查看变量值等。要使用Byebug,首先需要安装它:gem install byebug然后
Linux环境下Ruby代码调试工具
2024-09-15

python怎么使用pdb调试代码

小编给大家分享一下python怎么使用pdb调试代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用pdb调试代码Python有自己的内置调试器-pdb。调试器
2023-06-27

#7 Python代码调试

前言Python已经学了这么久了,你现在已经长大了,该学会自己调试代码了!相信大家在编写程序过程中会遇到大量的错误信息,我也不例外的啦~遇到这些问题该怎么解决呢?使用最多的方法就是使用print打印中间变量了哇,关于这种方法怎么说呢~low
2023-01-31

Python代码调试技巧

原文地址:http://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/一、使用pdb进行调试pdb是Python自带的包,为Python提供一种交互的源代码调试功能。常用命令
2023-01-31

python调试代码举例

Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。用pdb调试有多种方式可选:1. 命令行启动目标程序,加上-m参数,这样调用myscript.py的话断点就是程序的执行第一
2023-01-31

python之linux下pdb试调

编写一个简单程序用pdb试调一下,代码如下#!/usr/bin/envpython#coding:utf-8__author__=www.py3study.comimporttimeimportosdefgetlist():#构建一个纯数字
2023-01-30

在Linux 下如何调试 Python

在Linux 下如何调试 Python,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一般开发者都是在 IDE 中进行程序的调试,当然,有 IDE 的话,当然首选 IDE 进行调
2023-06-02

Python代码调试的方法是什么

这篇文章主要介绍“Python代码调试的方法是什么”,在日常操作中,相信很多人在Python代码调试的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python代码调试的方法是什么”的疑惑有所帮助!
2023-06-02

如何远程调试Python代码

这是一篇小记。平时使用python写的代码对外部依赖性都不复杂,这些代码在本地调试,运行没问题之后,就可以放到生产去跑了。然而,最近的一个项目,由于使用了一些内部服务,需要连接到内部的环境进行调试。如果每次都修改代码之后,发布一次到内部环境
2023-01-31

vscode怎么远程调试python代码?方法整理

在《vscode远程gdb调试》文章中,介绍了如何使用 vscode 调试 c/c++ 代码,作为该文的姊妹篇,本文对调试 python 代码的方法做一个整理。环境配置远程连接的方法同 《vscode远程gdb调试》中的第 1 节相同,本文
2023-10-22

怎么用VSCode调试React Vue代码

这篇文章主要介绍了怎么用VSCode调试React Vue代码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用VSCode调试React Vue代码文章都会有所收获,下面我们一起来看看吧。用 VSCode
2023-07-02

VSCode怎么调试PhpStudy里的代码

本篇内容主要讲解“VSCode怎么调试PhpStudy里的代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VSCode怎么调试PhpStudy里的代码”吧!配置 PhpStudy我使用的是WN
2023-07-05

vscode如何远程调试python代码

这篇文章主要介绍了vscode如何远程调试python代码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vscode如何远程调试python代码文章都会有所收获,下面我们一起来看看吧。环境配置配置 python
2023-07-06

vscode怎么对typescript代码进行调试

本篇内容主要讲解“vscode怎么对typescript代码进行调试”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vscode怎么对typescript代码进行调试”吧!在 VS Code 中,
2023-07-05

编程热搜

目录