当然,这里我要讲的不是如何用PyCharm如何调试Python程序,而是pyrasite这个工具。
pyrasite工具是个比较有意思的工具,曾几何时,在程序出现问题的时候,总是想着如果能获取到异常时的变量的情况就好了。结果,发现pyrasite这个工具可以满足我这个小小的心愿。
有趣的Pyrasite
pyrasite工具是利用ptrace来实现调试功能的,最常用的实现就是应用级别的GDB。
为了能顺利的使用pyrasite工具,除了使用如下pip安装对应的包外,还需要安装GDB工具。这里以Linux为例进行说明:
apt-get install python-dbg gdb #Ubuntu
yum install gdb python-debuginfo #Centos
pip install pyrasite
安装完成后,还需要让内核支持进程调试:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
这里我们直接关闭内核对进程调试的检查,否则后续的操作会发现程序卡住不动。
接下来,我们需要获取需要调试的Python的进程PID,可以通过os模块直接获取:
import os
PID = os.getpid
接下来,见证奇迹的时候到了,我们使用pyrasite-shell工具对指定PID进行附着,例如上面得到的PID为2112,则有:
pyrasite-shell 2112
之后如果不出意外的就会进入Python的交互环境中。下面我们就可以进行一些我们想做的事情,比如获取变量的值、修改变量的内容等。比如原交互模式为:
>>> import os
>>> os.getpid
2112
>>> a = "Hello,Python"
附着到对应的进程后,我们可以直接输入:
>>> a
"Hello,Python"
>>> a = "Hello,Java"
结果回到原来的交互模式下,会发现变量a的值被修改了。
当然,这是1个简单的示例。实际可以根据需要,进行扩展。
由于是附着在进程上,因此彼此之间共享着相同的数据。对于Windows平台上,通过DLL注入应该也能实现相同的效果。
结语
实际开发中还是老老实实用PyCharm提供的各种调试的工具,只是这个无意发现的方式,提供了另外1种调试的方式。
参考文章:
https://www.jetbrains.com/help/pycharm/attaching-to-local-process.html https://pyrasite.readthedocs.io/en/latest/Shell.html
https://www.jetbrains.com/help/pycharm/attaching-to-local-process.html https://pyrasite.readthedocs.io/en/latest/Shell.html
本文作者:本人笔名玉面玲珑颜如玉,1个多年滚打于Web开发的研发工程师。熟悉PHP、Java、C++等编程语言,以编程作为乐趣。
本文作者:本人笔名玉面玲珑颜如玉,1个多年滚打于Web开发的研发工程师。熟悉PHP、Java、C++等编程语言,以编程作为乐趣。
写的不错?赞赏一下
长按扫码赞赏我
● 黑客是怎么知道你的密码的
●
●地球程序员之神:没上过大学,曾拒盖茨的Offer,4代码农靠他吃饭
小贴士
返回 上一级 搜索“Java女程序员大数据留言送书运维算法Chrome黑客PythonJava人工智能女朋友MySQL书籍