是否可以使用Dtrace探测C++类中的条目

Is it possible to probe the entry in a C++ class using Dtrace?

本文关键字:C++ 可以使 Dtrace 探测 是否      更新时间:2023-10-16

我想看看程序何时使用Dtrace进入一个类。

例如:

dtrace -c './myProgram' -n 'pid$target:myProgram:function:entry'

当程序myProgram进入函数函数时,它会触发,现在,我如何编写一个在程序进入类而不是函数时激发的探测?

我尝试过:dtrace -c './myProgram' -n 'pid$target:myProgram:className:entry'但它不起作用

dtrace -c './main' -n 'pid$target:main::entry' -n 'pid$target:main::return'

通过这种方式,我可以在输出中输入运行时调用的所有函数,它将在函数的输入和返回时激发。

我正在探索的代码是:

#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 = &rect;
            ppoly->set_values (4,5);
            ppoly->area();
        }
    else
        {
            Triangle trgl;
            Polygon * ppoly = &trgl;
            ppoly->set_values (4,5);
            ppoly->area();
        }
    return 0;
}

我得到的dtrace输出是这样的:

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 

现在我正试图用Python脚本解析它,并制作一个调用树

的xml