ltracing bibliothèques partagées, comment?

Je voudrais tracer les appels de fonction à une bibliothèque particulière, appelez-le libfoo. Malheureusement, la documentation que j'ai trouvée est peu abondante, alors j'ai beaucoup de questions.

Dans la documentation de libfoo, il répertorie les appels foo_a, foo_b, foo_c .. en tant qu'appels api. Dans une DLL Windows, générer une telle list d'appels est facile, chaque appel externe doit être déclaré ainsi (dllexport (DLL) ou quelque chose comme ça), un script simple extraireait tous les symboles exportés. Comment puis-je générer une telle list pour les objects partagés Linux?

Une fois que je génère une telle list, comment puis-je l'utiliser avec ltrace pour générer une trace des appels en utilisant un programme particulier. Aussi comment puis-je étendre les arguments de string (C) dans ces appels?

    Il y a quelques outils que vous pouvez utiliser pour le faire; celui qui sera immédiatement disponible est perf .

    Disons que je veux voir en time réel ce qui se passe avec le process firefox; Je pourrais faire perf top -p <pidof firefox> ; vous verrez la sortie telle que:

     Samples: 802 of event 'cycles', Event count (approx.): 374901537 Overhead Shared Object Symbol 1.29% libpthread-2.21.so [.] pthread_mutex_unlock 1.12% [kernel] [k] ksize 0.84% firefox [.] 0x0000000000012bcc 0.71% libpthread-2.21.so [.] pthread_mutex_lock 0.64% [kernel] [k] flat_send_IPI_mask 0.63% firefox [.] 0x0000000000012bdd 0.61% libmozsqlite3.so [.] 0x000000000000cfd0 0.60% [kernel] [k] page_fault 0.60% libxul.so [.] 0x000000000233fa58 0.56% [kernel] [k] nf_nat_ipv4_local_fn 

    Vous pourriez alors utiliser ? pour voir ce que vous pouvez faire dans l'interface; vous pourriez zoomer sur un symbole en utilisant d . Vous pouvez parcourir les détails d'une carte d'un symbole pour voir les appels exacts d'un process.

    Vous voulez probablement agréger des données; vous pouvez utiliser perf record pour faire cela au lieu de perf top .

    Il existe d'autres outils que vous pouvez utiliser comme SystemTap ou un débogueur réel.