2009-02-27 49 views
0

请注意,这是针对Mac OS X的,但我想我的问题可能存在于任何支持dtrace的操作系统上。使用单个提供程序名称为插件创建dtrace探针

我有一个应用程序,利用了很多插件。我在核心应用程序和插件本身中都添加了userland探针。问题是,如果我在主应用程序正在使用的插件中使用相同的提供程序名称,那么当我尝试创建可用探测列表时,这些探测不会显示出来。看起来无论谁是第一个加载的代码都会赢。

在我的主要应用我.D文件:

provider MyApp { 
    probe doSomething(); 
}; 

,在我的插件:

provider MyApp { 
    probe plugin_doSomethingPluginish(); 
}; 

更改供应商到别的东西,像MyAppPlugin的名称,作品,但随后的提供商列表将会变得疯狂(MyAppPlugin1,MyAppPlugin2等)。我想认为有一种方法可以在与主应用程序相同的提供程序名称下添加新插件定义的探针,但是我没有看到它或者它不存在。

那么有没有办法做到这一点?如果没有,即使模块名称已经是唯一的,为每个插件提供不同的提供程序是否正常?看起来像这就是模块名称是...

回答

0

你应该只是定义一个provider.d文件,然后导入.h文件到每个类使用任何这些探针,真的没有理由做多个.d文件每个列出相同的提供者。我刚刚检查了DTrace文档,并没有看到任何关于它的事情,但是我会假设每个定义相同提供程序的多个.d文件都会产生某种冲突或者加载相同的探测列表提供者就像重新定义探测列表,而不是按照您的预期扩展它。

+0

这个问题是每个插件都是自己的项目。创建从插件项目到主应用项目的依赖是不可能的。 我想我可以为主项目构建.h文件,然后将其复制到每个插件中,但是当做出更改时更新会很痛苦。 – MyztikJenz 2009-02-27 21:14:53

相关问题