2009-02-27 3 views
0

Обратите внимание, что это для Mac OS X, хотя я думаю, что моя проблема будет существовать на любой операционной системе, поддерживающей dtrace.Создание пробников dtrace для плагинов с использованием имени одного поставщика

У меня есть приложение, которое использует множество плагинов. Я добавляю к нему пользовательские пробники как в основном приложении, так и в самих плагинах. Проблема в том, что если я использую то же имя провайдера в плагинах, которые использует основное приложение, эти зонды не появляются, когда я пытаюсь создать список доступных пробников. Похоже, что тот, кто первым загружает первый выигрыш.

мой .d файл в моем главном приложении:

provider MyApp { 
    probe doSomething(); 
}; 

и в моем плагине:

provider MyApp { 
    probe plugin_doSomethingPluginish(); 
}; 

Изменение имени поставщика к чему-то еще, например, MyAppPlugin, работает, но потом список провайдеров будет безумным (MyAppPlugin1, MyAppPlugin2 и т. д.). Я хотел бы подумать, что есть способ добавить новые зонды с плагинами под тем же именем поставщика, что и основное приложение, но я либо не вижу его, либо его не существует.

Так есть способ сделать это? А если нет, нормально ли иметь другой провайдер для каждого плагина, хотя имя модуля уже уникально? Похоже, это то, что имя модуля для ...

ответ

0

Вы должны просто определить один файл provider.d, а затем импортировать файл .h в каждый класс с помощью любого из этих зондов, нет причин, чтобы сделать несколько .d, в которых перечислены одни и те же провайдеры. Я просто проверил в документации DTrace об этом и ничего не вижу об этом сразу с места в карьер, но да, я бы предположил, что несколько файлов .d, каждый из которых определяет одного и того же провайдера, создают какой-то конфликт или что загрузка списка проб для того же поставщик похож на переопределение списка проб и не продлевает его, как вы, вероятно, планировали.

+0

Проблема с этим каждый плагин - это собственный проект. Создание зависимости от проектов плагинов к проекту основного приложения невозможно. Я полагаю, что я мог бы создать файл .h для основного проекта, а затем скопировать его в каждый плагин, но это было бы болью для обновления при внесении изменений. – MyztikJenz

+0

true, по крайней мере, если вы определяете разных поставщиков, вы можете сохранить один и тот же префикс для разных поставщиков, и таким образом вы можете сделать dtrace -l -n MyApp * ::: entry и т. Д., И таким образом все поставщики, соответствующие этому префиксу, будут быть перечисленным –