请注意,这是针对 Mac OS X 的,尽管我想我的问题会存在于任何支持 dtrace 的操作系统上。
我有一个使用很多插件的应用程序。我在核心应用程序和插件本身中都添加了用户态探测器。问题是,如果我在主应用程序使用的插件中使用相同的提供程序名称,则当我尝试创建可用探针列表时,这些探针不会显示。似乎谁的代码先加载谁就赢了。
我的主应用程序中的 .d 文件:
provider MyApp {
probe doSomething();
};
在我的插件中:
provider MyApp {
probe plugin_doSomethingPluginish();
};
将提供程序的名称更改为其他名称(例如 MyAppPlugin)可以正常工作,但随后提供程序的列表将变得疯狂(MyAppPlugin1、MyAppPlugin2 等)。我想有一种方法可以在与主应用程序相同的提供程序名称下添加新的插件定义的探针,但我要么没有看到它,要么它不存在。
那么有没有办法做到这一点?如果不是,即使模块名称已经是唯一的,为每个插件提供不同的提供程序是否正常?似乎这就是模块名称的用途......