请注意,这适用于Mac OS X,但我想我的问题会出现在任何支持dtrace的操作系统上。
我有一个使用大量插件的应用。我在核心应用程序和插件本身中都添加了userland探测器。问题是,如果我在主应用程序使用的插件中使用相同的提供程序名称,那么当我尝试创建可用探测器列表时,这些探测器不会显示。看起来无论谁首先加载的代码都会获胜。
我的主应用程序中的.d文件:
provider MyApp {
probe doSomething();
};
在我的插件中:
provider MyApp {
probe plugin_doSomethingPluginish();
};
将提供者的名称更改为其他名称(如MyAppPlugin)可以正常工作,但随后提供者列表将变得疯狂(MyAppPlugin1,MyAppPlugin2等)。我想有一种方法可以在与主应用程序相同的提供程序名称下添加新的插件定义的探测器,但我要么没有看到它,要么它不存在。
有没有办法做到这一点?如果没有,即使模块名称已经是唯一的,为每个插件提供不同的提供程序是否正常?似乎这就是模块名称的用途......
答案 0 :(得分:0)
您应该只定义一个provider.d文件,然后使用任何这些探针将.h文件导入每个类,实际上没有理由做多个.d文件,每个文件列出相同的提供程序。我刚刚在DTrace文档中检查了这一点,并且没有看到任何关于它的信息,但是我会假设每个定义相同提供程序的多个.d文件会产生某种冲突或加载探针列表提供者就像重新定义探测列表而不是像你想要的那样扩展它。