用GDB排查Python程序故障】的更多相关文章

    某Team在用Python开发一些代码,涉及子进程以及设法消除僵尸进程的需求.实践中他们碰上Python程序非预期退出的现象.最初他们决定用GDB调试Python解释器,查看exit()的源头.我听了之后,觉得这个问题应该用别的调试思路.帮他们排查这次程序故障时,除去原始问题,还衍生了其他问题. 这次的问题相比西安研发中心曾经碰上的Python信号处理问题,有不少基础知识.先验知识是共用的,此处不做再普及,感兴趣的同学可以翻看我以前发过的文章. 下文是一次具体的调试.分析记录.为了简化现…
参考文章:https://mozillazg.com/2017/07/debug-running-python-process-with-gdb.html https://blog.alswl.com/2013/11/python-gdb/ 我在本地没有安装python2.7-debug成功,其实查资料,安装起来还是蛮麻烦的,可是关键是不是每个python版本都有对应的debug版本可以安装…
debug #排除程序故障 print()函数常和#号注释结合在一起用来debug 多行注释有两种快捷操作:1.在需要注释的多行代码块前后加一组三引号''' 2.选中代码后使用快捷键操作:Windows快捷键是ctrl+/,Mac为cmd+/,适用于本地编辑器) 一种异常处理的机制,可以在异常出现时即时捕获,然后内部消化掉,让程序继续运行try…except…语句 Python的所有报错类型https://www.runoob.com/python/python-exceptions.html#…
本文主要介绍3个工具:pdb,objgraph,以及pympler. 1.pdb pdb是专门用于python代码调试,模仿gdb. 使用pdb可以查看堆栈,打印变量等. 这里介绍的是命令行下的pdb. 命令行下使用pdb,代码侵入小,调试方便. 本例中,python安装在当前目录下.venv 使用pdb加载python程序 .venv/bin/python -m pdb orange.py > /Users/lanyang/workspace/orange/orange.py(3)<modu…
使用gdb调试Python进程 有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump.例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭出gdb了.   主要是三步: 1)确保你的gdb版本>=7 2)安装python-debuginfo包(如:python-debuginfo-2.6.6-29.el6_2.2.x86_64.rpm,这个版本号一定要跟你所用的python版本一致(可以rpm -q…
序言 如果你是从Java语言开发转Python开发,可能在庆幸自己的开发效率提高了很多,但是也有痛苦的时候,比如你会怀念jstack,jmap, 等各种工具在生产环境做perfomance tuning.我之前使用过的有GDB,PyRasite,PyFlame等各种工具,特别是gdb系列工具,入门使用还挺麻烦的.这里推荐大家一款工具:Py-Spy. 引用官方的介绍: Py-Spy是Python程序的抽样分析器. 它允许您可视化查看Python程序在哪些地方花了更多时间,整个监控方式无需重新启动程…
1 在windows下运行python程序 1)从DOS命令行运行python脚本 用python解释器来执行python脚本,在windows下面python解释器是python.exe,我的python文件安装在D:\Python27,在这个目录下可以看到python解释器. 完整的命令应该是: python解释器   .py文件 解释器和py文件都是包含完整路径的.由于在windows环境下安装好IDLE后,在环境变量中指示了解释器路径.故运行起来只需: python   .py文件(完整…
在IDLE中执行下面代码,中文显示正常: # -*- coding:utf-8 -*- st=raw_input("请输入内容")print st 但在CMD中执行e:\hello.py,则中文会出现乱码,是什么原因呢? 从下图可以看出utf-8和gbk都可以通过编码和解码与unicode进行转换,那么如果utf-8转化为gbk该怎么办呢?首先,utf-8通过解码转化为unicode,然后通过unicode编码转化为gbk 现在回答上面的问题,为什么CMD会出现乱码呢?这是因为我们写的…
现在我在debug python程序就只是简单在有可能错误的地方print出来看一下,不知道python有没像c++的一些IDE一样有单步调试这类的工具?或者说各位python大神一般是怎么debug自己的python程序的? 应该用过 IPython 吧?想象一下,抛出异常时自动把你带到 IPython Shell 是不是很开心?而且和普通的IPython不同,这个时候可以调用 p (print), up(up stack), down(down stack) 之类的命令.还能创建临时变量,执…
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python编辑器安装与配置).由于python的两个版本2.x与3.x不兼容,且3.x在不断的进化中,不稳定.所以建议安装2.x,确切来说是2.7.x版本. 安装并配置完成之后,我们就可以编写第一个python程序.学过其他语言的兄弟姐妹们,都知道语言的入门程序就是hello world.那么,我们这里也以h…
刚写了个python程序,要一直在后台运行,即使断开ssh进程也在,下面是解决办法: 假如Python程序为test.py 编写shell脚本start.sh #!/bin/bash python test.py & chmod +x start.sh ./start.sh…
Gdb调试多进程程序 程序经常使用fork/exec创建多进程程序.多进程程序有自己独立的地址空间,这是多进程调试首要注意的地方.Gdb功能强大,对调试多线程提供很多支持. 方法1:调试多进程最土的办法:attach pid Attach是调试进程的常用办法,只要有可执行程序以及相应PID,即可工作.当然,为方便调试,可以在进程启动后,设定sleep一段时间,如30s,这样即可有充足的时间来attach. 方法2: set follow-fork-mode child + main断点 当设置s…
一个python程序的两种执行方式: 1.第一种方式是通过python解释器: cmd->python->进入python解释器->编写python代码->回车. 2.第二种方式是通过文件的方式: 通过文件编写一个python代码->cmd->python 指定文件所在的路径及文件名->回车. (python在这里的意思是以python解释器方式执行该路径下的python代码) 3.Python 2.7 和 3.5 打印方式的差别. Python 2版本的打印格式…
>问题 >>在一些python程序中的首行往往能够看见下面这两行语句中的一句 >>>#!/usr/bin/Python >>>#!/usr/bin/env python >>为什么呢??? >原因 脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 >区别 >>#!/usr/bin/Python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器 &…
各种程序员所写的阶乘算法代码 # -*- coding: utf-8 -*- #新手程序员(递归) def factorial(x): if x == 0: return 1 else: return x * factorial(x - 1) print factorial(6) #有一年 Python 经验的程序员 def Factorial(x): res = 1 for i in xrange(2, x + 1): res *= i return res print Factorial(6…
关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Application Development)中颇为受欢迎,同时Python还能作为脚本语言或者胶水语言讲现成的组件或者服务结合起来.Python支持模块(modules)和包(packages),所以也鼓励程序的模块化以及代码重用. 关于本文 Python简单.易学的语法可能会误导一些Python程序员(特别是那些…
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,使用函数实现用来判断偶数和奇数'''def number_deal(a): if a%2==0: print("您输入的数是偶数!") else: print("您输入的数是奇数")if __name__ == '__main__': number_deal(10);…
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input("please input a number:"))except ValueError: print("第一个运算数字输入非数字")try: b=int(raw_input("please input another number:"))except Valu…
pdb是python内置的调试工具, 它可以在终端中调试Python程序, 这允许pdb在很多无法安装IDE的服务器上使用. 虽然远程调试使用广泛, 但在必要的时候(比如难以在本地搭建运行环境)pdb仍然是一个便利的选择. 我们可以在python源代码中设置断点: import pdb def func(): for i in range(100): pdb.set_trace() # set breakpoint print(i) 随后执行源文件, pdb.set_trace()会如同一个断点…
原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修改分为可变对象和不可变对象,其中数字.字符串.元组属于不可变对象,字典以及列表.字节数组属于可变对象. 来看一段程序: class Student(object): def __init__(self,name,course=[]): self.name = name self.course = c…
原文发表在我的博客主页,转载请注明出处! 建议四十一:一般情况下使用ElementTree解析XML python中解析XML文件最广为人知的两个模块是xml.dom.minidom和xml.sax,作为主要解析XML方法的两种实现,DOM需要将整个XML文件加载到内存中并解析为一棵树,简单但是内存消耗大:SAX是基于事件驱动的,虽不需要全部装入XML文件,但是处理过程复杂.一般情况下选择ElementTree便可以,cElementTree是其Cython实现,速度更快,消耗内存更少,性能上更…
使用 GDB 调试多进程程序 GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较. 3 评论 田 强 (tianq@cn.ibm.com), 软件工程师, IBM中国软件开发中心 2007 年 7 月 30 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大.对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考…
这个随笔涉及到几个批处理脚本得知识点. windows的start命令, 启动另一个窗口运行指定的程序或命令. windows的call命令, 从批处理程序调用另一个程序, 直到被调用程序退出, 再继续原先的批处理程序 参数: windows, %0为shell 本身, %1为第1个参数, 以此类推 linux, $0为shell 本身, $1为第1个参数, 以此类推 返回值: windows:当一个命令完成后, 可以使用 %errorlevel% , 获得 exit code linux: 可…
前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了面试官直接打来的电话,问我为啥还没到,我说没人通知我我不知道呀.结果我就直接被他邀请去以访客的身份参加面试了.不知道人力的姑娘是不是认识我,且和我有仇,终于可以报复了... 然后,我终于如约到了,面试官带着我去前台登记.前台的妹子更萌...认为我是面试官,面试官是才是来面试的.我气质真的那么合吗?…
>怎么在DOS环境运行一个python程序 >>在文本编辑器中编辑程序,最后保存成   文件名.py  的格式 >>在DOS界面下找到源程序所在的路径,然后用  python 文件名.py  运行程序…
editplus3是一款不错的编辑器,他可以编译,运行java,php等各种程序,现把他运行Python程序的方法贴出来,首先得安装python,然后打开editplug3,工具——配置用户工具——组名称随便写个后点添加选应用程序,菜单文本:python命令:C:\Python31\python.exe(你自己实际安装python的目录)参数:选择向下的箭头--“文件路径”初始目录:“文件目录”捕获输出:开启确定即可,然后运行程序的时候只需点工具--python就开始运行了…
  [转自:http://blog.csdn.net/luckeryin/article/details/4477233] 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python def debug_demo(val):                 if val <= 1600 :                                 print "level 1"   …
学习任何一门语言的第一步,首先要写个'hello world',这算是程序员的一个传统.但在写之前,还有注意几个问题. 首先,python是一门脚本语言,而脚本语言的特点就是:我们写的代码会先由解释器进行编译以后,再去执行.但是当我们的程序运行在操作系统之上时,系统并没有那么智能,能够自动识别出我们要用哪个解释器去解释我们的代码(windows则通过后缀名关联执行程序,所以不用声明也可以,但是我们的代码更多在linux上运行,所以解释器的声明算是必须的),所以,我们必须要声明我们的解释器是什么.…
转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID. 前面有*的是当前调试的线程. thread ID 切换当前调试的线程为指定ID的线程. break thread_test.c:123 thread all在所有线程中相应的行上设置断点thread apply ID1 ID…
Debugging with GDB http://www.delorie.com/gnu/docs/gdb/gdb_25.html GDB调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID. 前面有*的是当前调试的线程. thread ID 切换当前调试的线程为指定ID的线程. break…