0

请注意,这是针对 Mac OS X 的,尽管我想我的问题会存在于任何支持 dtrace 的操作系统上。

我有一个使用很多插件的应用程序。我在核心应用程序和插件本身中都添加了用户态探测器。问题是,如果我在主应用程序使用的插件中使用相同的提供程序名称,则当我尝试创建可用探针列表时,这些探针不会显示。似乎谁的代码先加载谁就赢了。

我的主应用程序中的 .d 文件:

provider MyApp {
    probe doSomething();
};

在我的插件中:

provider MyApp {
    probe plugin_doSomethingPluginish();
};

将提供程序的名称更改为其他名称(例如 MyAppPlugin)可以正常工作,但随后提供程序的列表将变得疯狂(MyAppPlugin1、MyAppPlugin2 等)。我想有一种方法可以在与主应用程序相同的提供程序名称下添加新的插件定义的探针,但我要么没有看到它,要么它不存在。

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

4

1 回答 1

0

您应该只定义一个 provider.d 文件,然后使用这些探测器中的任何一个将 .h 文件导入每个类,实际上没有理由执行多个 .d 文件,每个文件都列出相同的提供者。我刚刚检查了有关此的 DTrace 文档,并没有立即看到任何有关它的信息,但是是的,我认为多个 .d 文件每个都定义相同的提供程序会产生某种冲突,或者加载相同的探针列表provider 就像重新定义探测列表,而不是按照您的预期扩展它。

于 2009-02-27T21:01:23.837 回答