Я хочу написать Dtrace зонд, который соответствовал бы функции с std::string
аргументом и распечатать содержимое струны:Как напечатать libstdC++ содержание строки с DTrace
void func(std::string some) {
/* some code here */
}
Я пытался реализовать датчик like this:
pid$target::func(std??string):entry
{
this->str = *(uintptr_t*)copyin(arg1, sizeof(char*));
printf("arg1 %s", copyinstr(this->str));
}
К сожалению, это не сработает для меня, dtrace сообщает, что он обнаружил недействительный адрес. Кроме того, здесь есть еще одна проблема: строка в libstdC++ использует копию для записи, поэтому недостаточно просто справиться с указателем. Кто-нибудь знает, как это сделать? Я использую dtrace на mac os x.