std::string
関数と引数を照合し、文字列の内容を出力する dtrace プローブを作成したいと思います。
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 を使用しています。