[Bug 223704] sysutils/DTraceToolkit: dtruss aborts on 12.0-CURRENT
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Thu Nov 16 12:38:52 UTC 2017
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223704
Bug ID: 223704
Summary: sysutils/DTraceToolkit: dtruss aborts on 12.0-CURRENT
Product: Ports & Packages
Version: Latest
Hardware: Any
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: Individual Port(s)
Assignee: skreuzer at FreeBSD.org
Reporter: dch at freebsd.org
Flags: maintainer-feedback?(skreuzer at FreeBSD.org)
Assignee: skreuzer at FreeBSD.org
I discovered this at BSDCan with gnn@ but never got around to bugzillaing it -
sorry :(
steps:
run some program, like top(1), on another terminal.
in the main terminal, run dtruss top
# sudo /usr/local/share/dtrace-toolkit/dtruss top
dtrace: invalid probe specifier
actual results:
dtruss echos the dtrace script back to the console and whines.
dtrace: invalid probe specifier
... script ...
: probe description syscall::lstat*:return does not match any probes
expected results:
same as on 11.1R amd 64 - dtracing results spew over console
```
# sudo /usr/local/share/dtrace-toolkit/dtruss top
dtrace: invalid probe specifier
#pragma D option quiet
#pragma D option switchrate=10
/*
* Command line arguments
*/
inline int OPT_command = 1;
inline int OPT_follow = 0;
inline int OPT_printid = 0;
inline int OPT_relative = 0;
inline int OPT_elapsed = 0;
inline int OPT_cpu = 0;
inline int OPT_counts = 0;
inline int OPT_pid = 0;
inline int OPT_name = 0;
inline int OPT_trace = 0;
inline int OPT_stack = 0;
inline string NAME = ".";
inline string TRACE = ".";
dtrace:::BEGIN
{
/* print header */
OPT_printid ? printf("%-9s ", "PID/LWP") : 1;
OPT_relative ? printf("%8s ", "RELATIVE") : 1;
OPT_elapsed ? printf("%7s ", "ELAPSD") : 1;
OPT_cpu ? printf("%6s ", "CPU") : 1;
printf("SYSCALL(args) \t\t = return\n");
}
/*
* Save syscall entry info
*/
syscall:::entry
/((OPT_command || OPT_pid) && pid == $target) ||
(OPT_name && execname == NAME) ||
(OPT_follow && progenyof($target))/
{
/* set start details */
self->start = timestamp;
self->vstart = vtimestamp;
self->arg0 = arg0;
self->arg1 = arg1;
self->arg2 = arg2;
/* count occurances */
OPT_counts == 1 ? @Counts[probefunc] = count() : 1;
}
/*
* Follow children
*/
syscall::fork*:return
/(OPT_follow && progenyof($target)) && (!OPT_trace || (TRACE == probefunc))/
{
/* print output */
self->code = errno == 0 ? "" : "Err#";
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d: ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d: ", 0) : 1;
OPT_cpu ? printf("%6d ", 0) : 1;
printf("%s(0x%X, 0x%X, 0x%X)\t\t = %d %s%d\n", probefunc,
self->arg0, self->arg1, self->arg2, (int)arg0, self->code,
(int)errno);
}
/*
* Check for syscall tracing
*/
syscall:::entry
/OPT_trace && probefunc != TRACE/
{
/* drop info */
self->start = 0;
self->vstart = 0;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/*
* Print return data
*/
/*
* The following code is written in an intentionally repetative way.
* The first versions had no code redundancies, but performed badly during
* benchmarking. The priority here is speed, not cleverness. I know there
* are many obvious shortcuts to this code, I have tried them. This style has
* shown in benchmarks to be the fastest (fewest probes fired, fewest actions).
*/
/* print 3 args, return as hex */
syscall::sigprocmask:return
/self->start/
{
/* calculate elapsed time */
this->elapsed = timestamp - self->start;
self->start = 0;
this->cpu = vtimestamp - self->vstart;
self->vstart = 0;
self->code = errno == 0 ? "" : "Err#";
/* print optional fields */
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d ", this->elapsed/1000) : 1;
OPT_cpu ? printf("%6d ", this->cpu/1000) : 1;
/* print main data */
printf("%s(0x%X, 0x%X, 0x%X)\t\t = 0x%X %s%d\n", probefunc,
(int)self->arg0, self->arg1, self->arg2, (int)arg0,
self->code, (int)errno);
OPT_stack ? ustack() : 1;
OPT_stack ? trace("\n") : 1;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/* print 3 args, arg0 as a string */
syscall::access*:return,
syscall::stat*:return,
syscall::lstat*:return,
syscall::readlink*:return,
syscall::open*:return
/self->start/
{
/* calculate elapsed time */
this->elapsed = timestamp - self->start;
self->start = 0;
this->cpu = vtimestamp - self->vstart;
self->vstart = 0;
self->code = errno == 0 ? "" : "Err#";
/* print optional fields */
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d ", this->elapsed/1000) : 1;
OPT_cpu ? printf("%6d ", this->cpu/1000) : 1;
/* print main data */
printf("%s(\"%S\", 0x%X, 0x%X)\t\t = %d %s%d\n", probefunc,
copyinstr(self->arg0), self->arg1, self->arg2, (int)arg0,
self->code, (int)errno);
OPT_stack ? ustack() : 1;
OPT_stack ? trace("\n") : 1;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/* print 3 args, arg1 as a string */
syscall::write:return,
syscall::pwrite:return,
syscall::*read*:return
/self->start/
{
/* calculate elapsed time */
this->elapsed = timestamp - self->start;
self->start = 0;
this->cpu = vtimestamp - self->vstart;
self->vstart = 0;
self->code = errno == 0 ? "" : "Err#";
/* print optional fields */
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d ", this->elapsed/1000) : 1;
OPT_cpu ? printf("%6d ", this->cpu/1000) : 1;
/* print main data */
printf("%s(0x%X, \"%S\", 0x%X)\t\t = %d %s%d\n", probefunc, self->arg0,
stringof(copyin(self->arg1, self->arg2)), self->arg2, (int)arg0,
self->code, (int)errno);
OPT_stack ? ustack() : 1;
OPT_stack ? trace("\n") : 1;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/* print 0 arg output */
syscall::*fork*:return
/self->start/
{
/* calculate elapsed time */
this->elapsed = timestamp - self->start;
self->start = 0;
this->cpu = vtimestamp - self->vstart;
self->vstart = 0;
self->code = errno == 0 ? "" : "Err#";
/* print optional fields */
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d ", this->elapsed/1000) : 1;
OPT_cpu ? printf("%6d ", this->cpu/1000) : 1;
/* print main data */
printf("%s()\t\t = %d %s%d\n", probefunc,
(int)arg0, self->code, (int)errno);
OPT_stack ? ustack() : 1;
OPT_stack ? trace("\n") : 1;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/* print 1 arg output */
syscall::close:return
/self->start/
{
/* calculate elapsed time */
this->elapsed = timestamp - self->start;
self->start = 0;
this->cpu = vtimestamp - self->vstart;
self->vstart = 0;
self->code = errno == 0 ? "" : "Err#";
/* print optional fields */
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d ", this->elapsed/1000) : 1;
OPT_cpu ? printf("%6d ", this->cpu/1000) : 1;
/* print main data */
printf("%s(0x%X)\t\t = %d %s%d\n", probefunc, self->arg0,
(int)arg0, self->code, (int)errno);
OPT_stack ? ustack() : 1;
OPT_stack ? trace("\n") : 1;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/* print 2 arg output */
syscall::utimes:return,
syscall::munmap:return
/self->start/
{
/* calculate elapsed time */
this->elapsed = timestamp - self->start;
self->start = 0;
this->cpu = vtimestamp - self->vstart;
self->vstart = 0;
self->code = errno == 0 ? "" : "Err#";
/* print optional fields */
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d ", this->elapsed/1000) : 1;
OPT_cpu ? printf("%6d ", this->cpu/1000) : 1;
/* print main data */
printf("%s(0x%X, 0x%X)\t\t = %d %s%d\n", probefunc, self->arg0,
self->arg1, (int)arg0, self->code, (int)errno);
OPT_stack ? ustack() : 1;
OPT_stack ? trace("\n") : 1;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/* print 3 arg output - default */
syscall:::return
/self->start/
{
/* calculate elapsed time */
this->elapsed = timestamp - self->start;
self->start = 0;
this->cpu = vtimestamp - self->vstart;
self->vstart = 0;
self->code = errno == 0 ? "" : "Err#";
/* print optional fields */
OPT_printid ? printf("%6d/%d: ", pid, tid) : 1;
OPT_relative ? printf("%8d ", vtimestamp/1000) : 1;
OPT_elapsed ? printf("%7d ", this->elapsed/1000) : 1;
OPT_cpu ? printf("%6d ", this->cpu/1000) : 1;
/* print main data */
printf("%s(0x%X, 0x%X, 0x%X)\t\t = %d %s%d\n", probefunc, self->arg0,
self->arg1, self->arg2, (int)arg0, self->code, (int)errno);
OPT_stack ? ustack() : 1;
OPT_stack ? trace("\n") : 1;
self->arg0 = 0;
self->arg1 = 0;
self->arg2 = 0;
}
/* program exited */
proc:::exit
/(OPT_command || OPT_pid) && pid == $target/
{
exit(0);
}
/* print counts */
dtrace:::END
{
OPT_counts == 1 ? printf("\n%-32s %16s\n", "CALL", "COUNT") : 1;
OPT_counts == 1 ? printa("%-32s %@16d\n", @Counts) : 1;
}
: probe description syscall::lstat*:return does not match any probes
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-ports-bugs
mailing list