DTrace script asserts and kills the other process

ambrosehuang ambrose ambrosehua at gmail.com
Thu Aug 4 16:41:40 UTC 2011


2011/8/4 ambrosehuang ambrose <ambrosehua at gmail.com>

>
>
> 2011/8/3 Andriy Gapon <avg at freebsd.org>
>
>>  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"
>> >
>>
>> I just saw  your  commit, I will verify it on 8-stable soon, thank you!
>>
> --
>> Andriy Gapon
>>
> I test your commit on  8-stable, here is my commit:
commit 84f49c7ffa130ec4bcd7fb0a619b36ab615dfeb4
Author: mm <mm at FreeBSD.org>
Date:   Thu Aug 4 10:37:12 2011 +0000

this is the my result:

[root at lateaxfreebsd dtrace]# dtrace -n 'pid$target:libc::entry' -p 39699
libc.so.7: invalid probe specifier pid$target:libc::entry: probe description
pid39699:libc::entry
User defined signal 1: 30
[1]+  Hangup: 1               ../test

I also test the example from userland/dtrace in wiki, it failed with same
result,
 it seems the pid provider has something wrong with libc when probing;

[root at lateaxfreebsd dtrace]# dtrace -n 'pid$target:::entry' -p 40346
test: description 'pid$target:::entry' matched 2 probes
^C
success

[root at lateaxfreebsd dtrace]# dtrace -ln 'pid$target:::entry' -p 40346
   ID   PROVIDER            MODULE                          FUNCTION NAME
33913   pid40346              test                            _start entry
33914   pid40346              test                              main entry
User defined signal 1: 30
[1]+  Hangup: 1               ../test

Anyway, there is no core dump.


More information about the freebsd-hackers mailing list