DTrace script asserts and kills the other process

Andriy Gapon avg at FreeBSD.org
Wed Aug 3 10:35:19 UTC 2011


on 28/07/2011 07:10 ambrosehuang ambrose said the following:
>> Yuri <yuri at rawbw.com> wrote:
>>
>>> I am trying to run this dtrace script:
>>>
>>> #!/usr/sbin/dtrace -s
>>> pid123:libc::entry
>>> {
>>> self->timestmp[probefunc] = timestmp;
>>> }
>>> pid123:libc::return
>>> /self->timestmp[probefunc] != 0/
>>> {
>>> @function_duration[probefunc] = sum(timestmp -
>>> self->timestmp[probefunc]); timestmp[probefunc] = 0;
>>> }
>>>
>>> which I got from here:
>>> http://www.princeton.edu/~unix/Solaris/troubleshoot/dtrace.html
>>> replacing 123 with the pid of some running process.
>>>
>>> Result: dtrace utility asserts:
>>> Assertion failed: (dpr != NULL), file
>>>
>> /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c,
>>> line 751.
>>> Abort trap: 6
>>>
>>> Also the target process is killed too:
>>> Killed: 9
>>>
>>> 8.2-STABLE amd64
>>
>> This is a known issue. You may be able to work around it by
>> letting dtrace start the traced process.
>>
>> There's already a PR about it:
>> http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/158431
>> but the limitation isn't mentioned in the wiki:
>> http://wiki.freebsd.org/DTrace/userland

FYI and benefit:  I've committed what should be a fix for this issue, r224632.

>> It's not clear to me if this has worked in the past or if it
>> works for other architectures (the reporter and I are both using
>> amd64, too).
>>
>> Fabian
>>
> I came across the same problem in 8.2-stable , it seemed the problem had
> been there since 8.2-release with userland dtrace integrated. I followed the
> PR185431 and found when  dtrace  started, it indeed attached to the traced
> process( dpr != NULL), but the traced process died soon, and
> according to the PR, this is "error in error" since the dtrace  came accross
> error in dfatal
> ....................................................................................................................................................
> #3 0x0000000808d8af2d in dt_proc_lookup (dtp=0x80b841000, P=0x80d7ffb40,
> remove=0)
> at
> /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c:751
> #4 0x0000000808d8af92 in dt_proc_destroy (dtp=0x80b841000, P=0x80d7ffb40)
> at
> /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c:763
> #5 0x0000000808d8bc6e in dt_proc_hash_destroy (dtp=0x80b841000)
> at
> /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c:1162
> #6 0x0000000808daa4b5 in dtrace_close (dtp=0x80b841000)
> at
> /usr/src/cddl/lib/libdtrace/../../../cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c:1554
> #7 0x0000000000402775 in dfatal (fmt=0x408572 "no probes %s\n")
> at
> /usr/src/cddl/usr.sbin/dtrace/../../../cddl/contrib/opensolaris/cmd/dtrace/dtrace.c:236
> #8 0x0000000000406b2c in main (argc=3, argv=0x7ffffffed9c0)
> at
> /usr/src/cddl/usr.sbin/dtrace/../../../cddl/contrib/opensolaris/cmd/dtrace/dtrace.c:1825
> .....................................................................................................................................................
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
> 


-- 
Andriy Gapon


More information about the freebsd-hackers mailing list