我想编写一个 dtrace 探针,它可以匹配带有std::string
参数的函数并打印字符串的内容:
void func(std::string some) {
/* some code here */
}
我试图像这样实现探针:
pid$target::func(std??string):entry
{
this->str = *(uintptr_t*)copyin(arg1, sizeof(char*));
printf("arg1 %s", copyinstr(this->str));
}
不幸的是,这对我不起作用,dtrace 报告它检测到无效地址。此外,这里还有另一个问题 - libstdc++ 中的字符串在写入时使用复制,所以在这里仅仅处理一个指针是不够的。有人知道怎么做吗?我在 mac os x 上使用 dtrace。