Il s'agit de la commande sprof qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
sprof - lire et afficher les données de profilage d'objet partagé
SYNOPSIS
sprof [option] ... chemin-objet-partagé [chemin-de-données-profil]
DESCRIPTION
Quand vous vous déconnectez, votre profil sprof La commande affiche un résumé de profilage pour l'objet partagé (bibliothèque partagée)
spécifié comme premier argument de ligne de commande. Le résumé de profilage est créé à l'aide de
données de profilage précédemment générées dans le deuxième argument de ligne de commande (facultatif). Si
le chemin d'accès aux données de profilage est omis, puis sprof tentera de le déduire en utilisant le
nom de l'objet partagé, recherche d'un fichier portant le nom .profil dans le
répertoire actuel.
OPTIONS
Les options de ligne de commande suivantes spécifient la sortie de profil à produire :
-c, --call-paires
Imprimer une liste de paires de chemins d'appels pour les interfaces exportées par le
objet, ainsi que le nombre de fois que chaque chemin est utilisé.
-p, --profil-plat
Générer un profil plat de toutes les fonctions de l'objet surveillé, avec
compte et tique.
-q, --graphique
Générez un graphique d'appels.
Si aucune des options ci-dessus n'est spécifiée, le comportement par défaut est d'afficher un plat
profil et un graphique d'appels.
Les options de ligne de commande supplémentaires suivantes sont disponibles :
-?, --Aidez-moi
Affichez un résumé des options et des arguments de la ligne de commande et quittez.
--usage
Affichez un court message d'utilisation et quittez.
-V, --version
Affichez la version du programme et quittez.
CONFORME À
Quand vous vous déconnectez, votre profil sprof La commande est une extension GNU, non présente dans POSIX.1.
EXEMPLE
L'exemple suivant illustre l'utilisation de sprof. L'exemple se compose d'un
programme qui appelle deux fonctions dans un objet partagé. Tout d'abord, le code du programme principal :
$ cat prog.c
#inclure
vide x1(vide);
vide x2(vide);
int
principal(int argc, char *argv[])
{
x1();
x2();
quitter(EXIT_SUCCESS);
}
les fonctions x1() et x2() sont définis dans le fichier source suivant qui est utilisé pour
construire l'objet partagé :
$ cat libdemo.c
#comprendre
annuler
consommerCpu1(int lim)
{
entier j;
pour (j = 0; j < lim; j++)
getppid();
}
annuler
x1(vide) {
entier j;
pour (j = 0; j < 100; j++)
consommerCpu1(200000);
}
annuler
consommerCpu2(int lim)
{
entier j;
pour (j = 0; j < lim; j++)
getppid();
}
annuler
x2 (vide)
{
entier j;
pour (j = 0; j < 1000; j++)
consommerCpu2(10000);
}
Maintenant, nous construisons l'objet partagé avec le vrai nom libdemo.so.1.0.1, et le soname
libdemo.so.1:
$ cc -g -fPIC -partagé -Wl,-soname,libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c
Ensuite, nous construisons des liens symboliques pour le nom de la bibliothèque et le nom de l'éditeur de liens :
$ ln -sf libdemo.so.1.0.1 libdemo.so.1
$ ln -sf libdemo.so.1 libdemo.so
Ensuite, nous compilons le programme principal, le liant à l'objet partagé, puis listons les
dépendances dynamiques du programme :
$ cc -g -o prog prog.c -L. -ldémo
$ ldd prog
linux-vdso.so.1 => (0x00007fff86d66000)
libdemo.so.1 => introuvable
libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd4dc51f000)
Afin d'obtenir des informations de profilage pour l'objet partagé, nous définissons l'environnement
variable LD_PROFIL avec le nom de la bibliothèque :
$ Exporter LD_PROFILE=libdemo.so.1
On définit ensuite la variable d'environnement LD_PROFILE_OUTPUT avec le chemin d'accès du
répertoire où la sortie du profil doit être écrite, et créez ce répertoire si ce n'est pas le cas
existe déjà :
$ Exporter LD_PROFILE_OUTPUT=$(mot de passe)/prof_data
$ mkdir -p $LD_PROFILE_OUTPUT
LD_PROFIL provoque la sortie du profilage ajouté au fichier de sortie s'il existe déjà,
nous veillons donc à ce qu'il n'y ait pas de données de profilage préexistantes :
$ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profil
Nous exécutons ensuite le programme pour produire la sortie de profilage, qui est écrite dans un fichier dans le
répertoire spécifié dans LD_PROFILE_OUTPUT:
$ LD_LIBRARY_PATH=. ./programme
$ ls données_prof
libdemo.so.1.profile
Nous utilisons ensuite le sprof -p option pour générer un profil plat avec des comptages et des ticks :
$ sprof -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
Profil plat :
Chaque échantillon compte pour 0.01 seconde.
% auto total cumulé
temps secondes secondes nous appelle/nous appelle/nom d'appel
60.00 0.06 0.06 100 600.00 consommeCpu1
40.00 0.10 0.04 1000 40.00 consommeCpu2
0.00 0.10 0.00 1 0.00 x1
0.00 0.10 0.00 1 0.00 x2
Quand vous vous déconnectez, votre profil sprof -q L'option génère un graphe d'appel :
$ sprof -q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
index % temps auto enfants appelés nom
0.00 0.00 100/100 x1 [1]
[0] 100.0 0.00 0.00 100 consommeCpu1 [0]
-----------------------------------------------
0.00 0.00 1/1
[1] 0.0 0.00 0.00 1 x1 [1]
0.00 0.00 100/100 consommeCpu1 [0]
-----------------------------------------------
0.00 0.00 1000/1000 x2 [3]
[2] 0.0 0.00 0.00 1000 consommeCpu2 [2]
-----------------------------------------------
0.00 0.00 1/1
[3] 0.0 0.00 0.00 1 x2 [3]
0.00 0.00 1000/1000 consommeCpu2 [2]
-----------------------------------------------
En haut et en bas, le " " Les chaînes représentent des identifiants qui sont en dehors de la
objet profilé (dans cet exemple, il s'agit d'instances de principale()).
Quand vous vous déconnectez, votre profil sprof -c L'option génère une liste de paires d'appels et le nombre de leurs occurrences :
$ sprof -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
x1 1
x1 consommeCpu1 100
x2 1
x2 consommeCpu2 1000
Utilisez sprof en ligne en utilisant les services onworks.net