2009-02-27 8 views
0

Beachten Sie, dass dies für Mac OS X ist, obwohl ich mein Problem vorstellen, auf jedem dtrace-fähigen OS existieren würde.Erstellen von dtrace Sonden für Plugins einzelne Provider-Namen

Ich habe eine App, die eine Menge von Plugins verwendet. Ich füge sowohl in der Kernanwendung als auch in den Plugins selbst Userland-Probes hinzu. Das Problem ist, dass wenn ich denselben Provider-Namen in den Plugins verwende, die die Hauptanwendung verwendet, diese Probes nicht angezeigt werden, wenn ich versuche, eine Liste der verfügbaren Probes zu erstellen. Es scheint, dass der Code, der zuerst lädt, gewinnt.

meine .d-Datei in meinem Haupt-App:

provider MyApp { 
    probe doSomething(); 
}; 

und in meinem Plugin:

provider MyApp { 
    probe plugin_doSomethingPluginish(); 
}; 

Ändern des Namens des Anbieters etwas anderes, wie MyAppPlugin, funktioniert, aber dann die Liste der Anbieter wird verrückt (MyAppPlugin1, MyAppPlugin2, etc). Ich würde gerne denken, dass es eine Möglichkeit gibt, neue Plug-in-definierte Probes unter dem gleichen Provider-Namen wie die Haupt-App hinzuzufügen, aber ich sehe es entweder nicht oder es existiert nicht.

Also gibt es eine Möglichkeit, dies zu tun? Und wenn nicht, ist es normal, für jedes Plugin einen anderen Provider zu haben, obwohl der Modulname bereits eindeutig ist? Scheint wie das ist, was der Modulname ist für ...

Antwort

0

Sie sollten nur eine provider.d-Datei definieren und importieren Sie dann die .h-Datei in jede Klasse mit einer dieser Sonden, gibt es wirklich keinen Grund, mehrere zu tun .d-Dateien, die jeweils denselben Anbieter auflisten. Ich habe gerade die DTrace-Dokumentation über dieses Thema eingecheckt und sehe sofort nichts davon, aber ich nehme an, dass mehrere .d-Dateien, die jeweils den gleichen Provider definieren, eine Art von Konflikt oder eine Loading-Probe-Auflistung für denselben erstellen Provider ist wie die Sondenliste neu zu definieren und nicht so zu erweitern, wie Sie es wahrscheinlich wollten.

+0

Das Problem dabei ist, jedes Plugin sein eigenes Projekt. Es ist nicht möglich, Abhängigkeiten von Plugin-Projekten zum Projekt der Haupt-App zu erstellen. Ich nehme an, ich könnte die .h-Datei für das Hauptprojekt erstellen und sie dann in jedes Plugin kopieren, aber es wäre ein Problem, sie zu aktualisieren, wenn eine Änderung vorgenommen wird. – MyztikJenz

+0

wahr, zumindest, wenn Sie verschiedene Anbieter definieren tun können Sie den gleichen Präfix für verschiedene Anbieter halten und auf diesen Weisen Sie dtrace -l -n MyApp * ::: Eintrag tun können, etc. und auf diese Weise alle Anbieter, den Präfix entsprechen, wird aufgeführt sein –