So drucken Sie einen NSString aus einem DTrace-Skript
DieseFrage fragt das Gleiche, aber als ich es versuchte:
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));
}
Es hat nicht funktioniert. arg2 sollte die Adresse des NSString sein. Ich habe:
NSWindow -setTitle: 100685240 7fff92d82f73 7fff78a6eb80 string addr = 7fff8e7e83b9 string val = Fensterspur: Fehler bei aktivierter Test-ID 5 (ID 35737: objc9434: NSWindow: -setTitle :: entry): ungültige Adresse (0x6c007400 24
Sie können von einer MacRoman- oder ASCII-Codierung des NSString ausgehen - im Grunde müssen Sie sich keine Gedanken über komplizierte (aus DTrace-Sicht) Codierungen machen.