gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:55:04 25 4
gpt4 key购买 nike

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

例如:

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

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

我试过: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

关于c++ - 是否可以使用 Dtrace 探测 C++ 类中的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29223843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com