Как напечатать NSString из сценария DTrace

Этотвопрос спрашивает то же самое, но когда я пытался:

typedef long long ptr_t;


objc$target:NSWindow:-setTitle?:entry
{

    printf( "%30s %10s %x %x %x\n", probemod, probefunc, arg0, arg1, arg2 );

    this->str = *(ptr_t*)copyin(arg2+2*sizeof(ptr_t), sizeof(ptr_t));

    printf("string addr = %p\n", this->str);
    printf("string val  = %s\n", copyinstr(this->str));
}

Это не сработало. arg2 должен быть адресом NSString. Я получил:

NSWindow -setTitle: 100685240 7fff92d82f73 7fff78a6eb80 string addr = 7fff8e7e83b9 string val = Окно dtrace: ошибка при включенном идентификаторе зонда 5 (ID 35737: objc9434: NSWindow: -setTitle :: entry): недопустимый адрес (0x6c007400690074 at at 0x6c007400690074) 24

Можно предположить кодирование NSString в кодировке MacRoman или ASCII - в основном не нужно беспокоиться о сложных (с точки зрения DTrace) кодировках.

Ответы на вопрос(1)

Ваш ответ на вопрос