Hy!
I have a problem with my script:
# cat process_ps.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
syscall::open:entry
/ (arg0 != NULL) && ( execname == "ps" ) && ( copyinstr(arg0) ==
"/proc/1305/psinfo" ) /
{
printf("%s:%s:%s:%s\t->\t%s (%d)\n", probeprov, probemod,
probefunc, probename, copyinstr(arg0), strlen(copyinstr(arg0)));
}
The output of this script:
# ./process_ps.d
syscall::open:entry -> /proc/1305/psinfo (17)
syscall::open:entry -> /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry -> /proc/1305/psinfo (17)
syscall::open:entry -> /proc/1305/psinfo (17)
syscall::open:entry -> /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry -> /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry -> /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry -> /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry -> /proc/1305/psinfo (17)
syscall::open:entry -> /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 1 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
syscall::open:entry -> /proc/1305/psinfo (17)
...
1. question:
I doesn't understand why are there these "invalid address (0xff358000)
in predicate at DIF offset 120" errors.
If i modify my script:
# cat process_ps.d
#!/usr/sbin/dtrace -qs
#pragma D option quiet
BEGIN {
printf("Your parameter(s):\t%s\n", $$1);
self->pida = strjoin(strjoin("/proc/",$$1),"/psinfo");
printf("New variable(s):\t%s (%d)\n", self->pida, strlen(self->pida));
}
syscall::open:entry
/ (arg0 != NULL) && ( execname == "ps" ) && ( copyinstr(arg0) == self->pida ) /
{
printf("%s:%s:%s:%s\t->\t%s (%d)\n", probeprov, probemod,
probefunc, probename, copyinstr(arg0), strlen(copyinstr(arg0)));
}
# ./process_ps.d 1305
Your parameter(s): 1305
New variable(s): /proc/1305/psinfo (17)
dtrace: error on enabled probe ID 2 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
dtrace: error on enabled probe ID 2 (ID 4538: syscall::open:entry):
invalid address (0xff358000) in predicate at DIF offset 120
... and write nothing ...
2. question
I don't understand why it is happen, i think the error is in "(
copyinstr(arg0) == self->pida )" but i think the syntax is ok.
Thanks a lot.
Br.:
Cni
_______________________________________________
dtrace-discuss mailing list
[email protected]