3

我用Issue 13405修补了 Python 2.7.3 ,然后用--with-dtraceconfigure 选项编译了 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' !=  ...
4

1 回答 1

1

探针需要一些解决方法:

dtrace 不支持 PATH 变量,这很烦人,当您在 /usr/lib/libdtrace.dylib 上运行 strings 命令时,您会看到它硬编码了 gcc 的使用(甚至不是 cpp 或 clang)。

应用补丁后你运行 autoconf 或 autoreconf 了吗?如果不是,@DTRACEOBJS@ 将不是可替换的字符串。从这些类型的补丁中忽略修改过的配置脚本是相当普遍的(至少在 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 绑定添加到libusdtopendtrace,这可能会有所帮助。

参考

于 2016-08-31T13:08:59.633 回答