2011-08-21 3 views
0

Comment j'imprime simplement la classe et la méthode définies par l'utilisateur en utilisant DTrace, sans la classe système, la méthode, telle que NSLock, NSThread, NSObject et ainsi de suite?Comment détecter sans la méthode système ou l'infrastructure système avec DTrace sous Mac OS X?

En utilisant le code D, il peut tracer toutes les méthodes Objective-C, y compris le système et défini par l'utilisateur:

objc$target:::entry 
{ 
    printf("%s %s\n", probemod, probefunc); 
} 

Répondre

1

DTrace ne connaît que les espaces du noyau et de l'utilisateur. Il ne sait rien de ce que les bibliothèques font partie du système et de ce qu'elles ne font pas.

Si vous suivez les conventions Cocoa et que vous préférez correctement toutes vos classes, vous pouvez spécifier le préfixe dans le nom de probe. Par exemple. si votre préfixe est VIC:

objc$target:VIC*::entry 
{ 
    printf("%s %s\n", probemod, probefunc); 
} 

Ces sondes seront déclenchées que si la classe passé préfixé avec VIC.

+0

Je veux juste surveiller l'utilisateur-defind (mon code) .. Je sais, utiliser "VIC" tel préfixe, peut juste obtenu la classe avec VIC, est-ce une autre façon? – victor

+0

Vous pouvez créer [fournisseur USDT] (http://blogs.oracle.com/dap/entry/writing_a_dtrace_usdt_provider) et l'appeler partout où vous voulez tracer. – Kentzo

Questions connexes