DTrace patch for Python 2.7.x and 3.x
DTrace patch for Python 2.7.x and 3.x
Última Actualización: 21 de septiembre de 2015
https://www.jcea.es/artic/python_dtrace.htm
You can follow this work in the Python bugtracker on issue 13405 (original work on issue 4111).
How to get the patch
You can clone my mercurial repository. Interesting branches are dtrace-issue13405_2.7, dtrace-issue13405_3.4, dtrace-issue13405_3.5 and dtrace-issue13405 (future 3.6). This configuration is recommended if you plan to contribute.
If you just want to compile your Python interpreter with dtrace patch applied, you only need to apply the matching patch over a pristine copy of the canonical Python source tree:
- Python 3.5.1: 209b219a8b5b
- Python 3.5.0: a7da156226da
- Python 3.5.0b2: 20ac4207134f
- Python 3.5.0a1: 6a85b8f9fe18
- Python 3.4.4: c450f9cba38a
- Python 3.4.3: d406e844623e
- Python 3.4.2: 55be19e94859
- Python 3.4.1: a1b9322b6d8c
- Python 3.4.0: 0de6441eedb7
- Python 3.4.0rc1: 1c6ba78665ce
- Python 3.4.0b1: 654264da62f2
- Python 2.7.11: 8c5948409bbe (fully compatible with computed gotos)
- Python 2.7.11: 733833f7789d (You must configure with --without-computed-gotos)
- Python 2.7.10: b5158e9b7e17
- Python 2.7.9: 05d8fd4c57a1
- Python 2.7.8: 0b37c3647b82
- Python 2.7.7: af8ecf2352e1
- Python 2.7.6: 0b375fd8628e
- Python 2.7.5: f96ea83cd766
- Python 2.7.3: 1a89922027e1
- Python 3.3.5: b8da4a55237d
- Python 3.3.4: 1c7158230a62
- Python 3.3.3: 93eb37b54d6f
- Python 3.3.2: 23dafaf73d29
- Python 3.3.0: 3f5aab499e15
How to compile and test
Do "autoconf".
Add "--with-dtrace" to your "configure" command line and compile as usual. If you have previously compiled Python in the same directory, remember to do "make distclean" first.
When done, you should run the complete testsuite. If you just want to run dtrace tests, do
# LD_LIBRARY_PATH=`pwd` ./python Lib/test/regrtest.py -v test_dtrace.py
You should get something like
[1/1] test_dtrace
test_function_entry_return (test.test_dtrace.DTraceTestsNormal) ... ok
test_garbage_collection (test.test_dtrace.DTraceTestsNormal) ... ok
test_instance_creation_destruction (test.test_dtrace.DTraceTestsNormal) ... ok
test_line (test.test_dtrace.DTraceTestsNormal) ... ok
test_stack (test.test_dtrace.DTraceTestsNormal) ... ok
test_unicode_function_entry_return (test.test_dtrace.DTraceTestsNormal) ... ok
test_unicode_stack (test.test_dtrace.DTraceTestsNormal) ... ok
test_verify_opcodes (test.test_dtrace.DTraceTestsNormal) ... ok ----------------------------------------------------------------------
Ran 8 tests in 5.335s OK
test_function_entry_return (test.test_dtrace.DTraceTestsOptimize) ... ok
test_garbage_collection (test.test_dtrace.DTraceTestsOptimize) ... ok
test_instance_creation_destruction (test.test_dtrace.DTraceTestsOptimize) ... ok
test_line (test.test_dtrace.DTraceTestsOptimize) ... ok
test_stack (test.test_dtrace.DTraceTestsOptimize) ... ok
test_unicode_function_entry_return (test.test_dtrace.DTraceTestsOptimize) ... ok
test_unicode_stack (test.test_dtrace.DTraceTestsOptimize) ... ok
test_verify_opcodes (test.test_dtrace.DTraceTestsOptimize) ... ok ----------------------------------------------------------------------
Ran 8 tests in 5.455s OK
1 test OK.
The first set of tests run under non-optimizing Python, while the second set run under optimizing Python (-O).
Documentation
:mod:`dtrace` --- DTrace probes for Python
=============================================== .. module:: dtrace
:synopsis: DTrace probes for Python. **Source code:** :source:`Lib/dtrace.py` -------------- The :mod:`dtrace` module indicates if the CPython executable currently
running has been compiled with DTrace probes support. .. impl-detail:: DTrace probes are implementation details of the CPython interpreter!
No garantees are made about probe compatibility between versions of
CPython. DTrace scripts can stop working or work incorrectly without
warning when changing CPython versions. The :mod:`dtrace` module defines the following variable: .. data:: available The variable will be ``True`` if the current CPython interpreter was
compiled with DTrace probe support. ``False`` if not. DTrace probes
------------- DTrace scripts are run externally to CPython. DTrace probes export
selected events inside CPython interpreter in order to make them
accessible to external scripts. The probes are exported through the "python" provider. The available
probes are defined in the file :file:`Include/pydtrace.d`. To learn how to use DTrace, read `DTrace User Guide
`_. .. opcode:: function-entry (arg0, arg1, arg2) Fires when python code enters a new function. *arg0* is sourcecode
file path, *arg1* is the name of the funcion called, and *arg2* is
line number. The probe is not fired if Python code calls C functions. .. opcode:: function-return (arg0, arg1, arg2) Fires when Python code finishes execution of a function. Parameters
are the same as in ``function-entry``. The probe is not fired if the finishing function is written in C. .. opcode:: line (arg0, arg1, arg2) Fires when Python code changes the execution line. Parameters are the
same as in ``function-entry``. The probe is not fired in C functions. .. opcode:: gc-start (arg0) Fires when the Python interpreter starts a garbage collection cycle.
*arg0* is the generation to scan, like :func:`gc.collect()`. .. opcode:: gc-done (arg0) Fires when the Python interpreter finishes a garbage collection
cycle. *arg0* is the number of collected objects. .. opcode:: instance-new-start (arg0, arg1) Fires when an object instanciation starts. *arg0* is the class name,
*arg1* is the filename where the class is defined. The probe is not fired for most C code object creations. .. opcode:: instance-new-done (arg0, arg1) Fires when an object instanciation finishes. Parameters are the same
as in ``instance-new-done``. The probe is not fired for most C code object creations. .. opcode:: instance-delete-start (arg0, arg1) Fires when an object instance is going to be destroyed. Parameters
are the same as in ``instance-new-done``. The probe is not fired for most C code object destructions. .. opcode:: instance-delete-done (arg0, arg1) Fires when an object instance has been destroyed. parameters are the
same as in ``instance-new-done``. Between an ``instance-delete-start`` and corresponding
``instance-delete-done`` others probes can fire if, for instance,
deletion of an instance creates a deletion cascade. The probe is not fired for most C code object destructions. Python stack
------------ When a DTrace probe is fired, the DTrace script can examine the stack.
Since CPython is a Python interpreter coded in C, the stack will show C
functions, with no direct relation to the Python code currently being
executed. Using the special "jstack()" DTrace function, the user will be given
hints about the python program stack, if possible. In particular, the
augmented stack will show python function calls, filename, name
of the function or method, and the line number. DTrace scripts examples
----------------------- DTrace python provider is suffixed by the pid of the process to monitor.
In the examples, the pid will be 9876. Show the time spent doing garbage collection (in nanoseconds):: python9876:::gc-start
{
self->t = timestamp;
} python9876:::gc-done
/self->t/
{
printf("%d", timestamp-self->t);
self->t = 0;
} Count how many instances are created of each class:: python9876:::instance-new-start
{
@v[copyinstr(arg1), copyinstr(arg0)] = count();
} Observe time spent in object destruction, useful if datastructures are
complicated and deletion of an object can create a cascade effect:: python9876:::instance-delete-start
/self->t==0/
{
self->t = timestamp;
self->level = 0;
} python9876:::instance-delete-start
/self->t/
{
self->level += 1;
} python9876:::instance-delete-done
/(self->level) && (self->t)/
{
self->level -= 1;
} python9876:::instance-delete-done
/(self->level==0) && (self->t)/
{
@time = quantize(timestamp-self->t);
self->t = 0;
} To know which python source code lines create new TCP/IP connections:: pid9876::sock_connect:entry
{
@conn[jstack()] = count();
}
DTrace patch for Python 2.7.x and 3.x的更多相关文章
- 偷梁换柱:使用mock.patch辅助python单元测试
最近在搞软工项目的后端测试,重新复习了一下python的mock.patch,并用它简化了对一些复杂逻辑的测试,在此记录 问题描述 本组的项目比较特殊,设计对教务网站的模拟登陆与信息爬取,同时不少接口 ...
- python 2016 大会 pyconsk ppt ---python dtrace
https://github.com/pyconsk/2016-slides PyCon SK 2016 - March 2016 1DTrace and PythonJesús Cea Aviónj ...
- json-patch 了解
What is JSON Patch? JSON Patch is a format for describing changes to a JSON document. It can be used ...
- Linux下编译安装源码包软件 configure ,make, make install, make test/check, make clean
http://www.360doc7.net/wxarticlenew/541275971.html 一.什么是源码包软件? 顾名思义,源码包就是源代码的可见的软件包,基于Linux和BSD系统的软件 ...
- __sizeof__()
https://bugs.python.org/issue2898 https://bugs.python.org/file10353/footprint.patch Index: Python/sy ...
- 应用安全 - 编程语言 | 框架 - PHP - Djiango - 漏洞 -汇总
CVE-2007-0404 Date , 类型Filename validation issue in translation framework. Full description 影响范围 CVE ...
- Linux下编译安装源码包软件 configure ,make, make install, make test/check, make clean 假目标
http://www.360doc7.net/wxarticlenew/541275971.html 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 ...
- UltraSoft - Beta - Postmortem事后分析
UltraSoft - Beta - PostMORTEM 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题和定义都在[软软软]功能规格说明书 ...
- UltraSoft Scrum Meeting 博客汇总
一.Alpha阶段 UltraSoft - Alpha - Scrum Meeting 1 UltraSoft - Alpha - Scrum Meeting 2 UltraSoft - Alpha ...
随机推荐
- 使用Code first 进行更新数据库结构(数据迁移)
CodeFirst 背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会 ...
- BZOJ_1600_[Usaco2008_Oct]_建造栅栏_(动态规划)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1600 将长度为n的线段分成4段,长度为整数,围成面积>0的四边形,求方案数. 分析 首先 ...
- [ECNU 1624] 求交集多边形面积
求交集多边形面积 Time Limit:1000MS Memory Limit:30000KB Total Submit:98 Accepted:42 Description 在平面上有两给定的凸多边 ...
- wildfly-9.0.2 web项目部署详细步骤
一.配置操作系统环境变量 JAVA_HOME = C:\Program Files (x86)\Java\jdk1.7.0_67 JBOSS_HOME = F:\server\wildfly-9.0. ...
- SQL_Server2005自动备份与删除—维护计划
业务背景: 为了方便客户及时自动更新SAP库里面的数据与减少磁盘的空间.所以要在SQL对数据进行自动备份与删除备份.这样可以更加方便管理员的管理,和减少管理员的工作量. 解决思路: 在2005 SQL ...
- uboot环境变量(设置bootargs向linux内核传递正确的参数)
这是我uboot的环境变量设置,在该设置下可以运行initram内核(从内存下载到nandflash再运行),但是运行nfs根文件系统的时候一直出错,各种错误.查看了很多资料后猜想应该是uboot传递 ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- 总体介绍
一.系统总体介绍 企业业务管理系统是针对经营企业管理而开发的专业管理软件, 是以“精细管理.过程监控”为设计理念,全面满足企业的信息化管理需求,充分发挥专业.平台.灵活等优点. 集进销存.财务.CRM ...
- GIS数据格式:Coverage
转自:http://www.cnblogs.com/w2william/archive/2009/10/15/1583954.html 我之前做了一个模块,基本实现了ArcCatalog中左边树状结构 ...
- C#父类对象和子类对象之间的转化
1. 子类到父类 Chinese c = new Chinese(); Person p1 = c; //从变量c看是一个中国人,所以可以把人的标签贴上去 2. 父类到子类 Chinese c2 = ...
- javaweb 之javascript 结合
1.javascript的简介 * 是基于对象和事件驱动的语言,应用与客户端. - 基于对象: ** 提供好了很多对象,可以直接拿过来使用 - 事件驱动: ** html做网站静态效果,javascr ...