Python Dtrace打了补丁,但仍然得到“无效的探针说明符”运行测试脚本

时间:2012-12-11 02:38:39

标签: python osx-mountain-lion cpython dtrace probe

我用Issue 13405修补了Python 2.7.3,然后使用--with-dtrace配置选项编译了python。

当我运行test_dtrace脚本时,测试失败并显示错误:

  

无效的探针说明符

如下图所示:

======================================================================
FAIL: test_function_entry_return (test_dtrace.DTraceTestsNormal)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_dtrace.py", line 99, in test_function_entry_return
    self.assertEqual(actual_result, expected_result)
AssertionError: 'dtrace: invalid probe specifier python*$target:::function-entry{    printf("Function entry %d ", timestamp);}python*$target:::function-entry,python*$target:::function-return{    printf("%d\t**%s*%s*%s*%d\\n", timestamp,        probename, copyinstr(arg0),        copyinstr(arg1), arg2);}python*$target:::function-return/(copyinstr(arg0)=="/Users/ramandeep/src/src/Python-2.7.3/dtrace_sample.py") &&(copyinstr(arg1)=="test_entry_return_and_stack")/{    self->trace = 0;}: probe description python*36447:::function-entry does not match any probes' !=  ...

1 个答案:

答案 0 :(得分:0)

探针需要一些解决方法:

  

dtrace并不尊重PATH变量,而且当您在/usr/lib/libdtrace.dylib上运行strings命令时,您会看到它硬编码使用gcc(甚至不是cpp或clang)。

     

应用补丁后,您是否运行过autoconf或autoreconf?如果不,   @ DTRACEOBJS @不是可替换的字符串。它相当常见(at   至少在Python社区中)从这些中省略修改的配置脚本   各种补丁因为生成的配置脚本之间的更改   不同版本的autoconf是如此庞大,以至于它们使实际相形见绌   补丁中的功能变化,通常是几个数量级。

     

将此节添加到phelper.d的顶部会过去   标题中的问题:

#ifdef __APPLE__
#define _SYS_TIME_H_
#define _SYS_SELECT_H_
#define __MATH_H__
#define _OS__OSBYTEORDER_H
#define _FD_SET
#define __GNUC_VA_LIST
#endif /* __APPLE__ */

还有一个项目可以将python bindings添加到libusdtopendtrace,这可能有所帮助。

<强>参考