dtrace -c './main' -n 'pid$target:main::entry' -n 'pid$target:main::return'
je peux avoir en sortie toutes les fonctions appelées à l'exécution, il se déclenche à la saisir d'une fonction et à sa revenir.
Le code que je sondage est la suivante:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Polygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b; }
virtual int area()
{ return 0; }
};
class Rectangle: public Polygon {
public:
int area()
{
foo();
return width*height;
}
void foo(){}
};
class Triangle: public Polygon {
public:
int area()
{
foo();
return width*height/2;
}
void foo(){}
};
int main() {
//initialize random seed
srand(time(NULL));
if(rand() % 2)
{
Rectangle rect;
Polygon * ppoly = ▭
ppoly->set_values (4,5);
ppoly->area();
}
else
{
Triangle trgl;
Polygon * ppoly = &trgl;
ppoly->set_values (4,5);
ppoly->area();
}
return 0;
}
et la sortie de DTrace je reçois est la suivante:
CPU ID FUNCTION:NAME
3 109401 main:entry
3 109404 Triangle::Triangle():entry
3 109405 Polygon::Polygon():entry
3 109415 Polygon::Polygon():return
3 109414 Triangle::Triangle():return
3 109403 Polygon::set_values(int, int):entry
3 109413 Polygon::set_values(int, int):return
3 109406 Triangle::area():entry
3 109407 Triangle::foo():entry
3 109417 Triangle::foo():return
3 109416 Triangle::area():return
3 109411 main:return
maintenant je suis en train de l'analyser avec un script Python et faire un xml de l'arbre d'appel
Il n'y a pas de "programme entrant dans une classe". Que voulez-vous dire? Presque tout le code exécutable est une fonction d'une forme ou d'une autre. Les classes peuvent avoir des fonctions membres, y compris des fonctions membres statiques, mais celles-ci sont toujours des fonctions. Les constructeurs et les destructeurs sont également des types spéciaux de fonctions. Essayez 'dtrace -l -n 'pid $ cible: myProgram :: entry' -c./MyProgram' pour voir une liste des points d'entrée de la fonction que DTrace connaît. (Puisque le nom de la fonction est vide, cela correspond à tout.) –
Merci pour cette réponse, j'ai résolu mon problème avec ça. Je voulais savoir quand le programme entre dans une fonction membre. – Alessandro
@Alessandro: S'il vous plaît poster votre solution comme une réponse à votre question. – myaut