Interesting. My expectation was that it would work like gdb i.e. that the
app would not run until gdb was in full control. For me, -c implies that
behavior.

I tried putting in a sleep for 10 seconds; still nothing:

     $ sudo dtrace -n 'pid$target:::entry { trace(arg0); }' -c ./out

On Tue, Dec 7, 2010 at 6:53 PM, Jim Mauro <james.ma...@oracle.com> wrote:

>
> I am cross-posting back to dtrace-discuss, since the Apple folks listen...
>
> I'm not sure what your hello world program is doing. I tried the same thing
> with compiled C code.
>
> The problem I ran into with hello world, and with the date example, is
> the program is executing and completing before dtrace can
> instrument it. Adding a sleep(1); to the hello world program and
> I get expected output.
>
> This does not happen on Solaris. I expect it's due to implementation
> differences in the pid provider between the operating systems.
>
> In any event, it seems on OS X using the pid provider on a binary
> the runs for less than a second does not give the pid provider
> time to instrument the code.
>
> That's not necessarily an issue (at least for me), since I never need
> to chase performance problems on something that runs in
> a few hundred milliseconds....
>
> ;^)
>
> /jim
>
> dtrace'ing hello world with a 1 second sleep;
>
> macosx> dtrace -n 'pid$target:::entry' -c ./hw
> dtrace: description 'pid$target:::entry' matched 7950 probes
> Hello World
> dtrace: pid 16109 has exited
> CPU     ID                    FUNCTION:NAME
>   0  27974 ImageLoaderMachO::getExportedSymbolAddress(ImageLoader::Symbol
> const*, ImageLoader::LinkContext const&, ImageLoader const*) con:entry
>   0  27973 ImageLoaderMachO::getSymbolAddress(ImageLoader::Symbol const*,
> ImageLoader const*, ImageLoader::LinkContext const&) const:entry
>   0  28101
> ImageLoaderMachOCompressed::exportedSymbolAddress(ImageLoader::Symbol
> const*) const:entry
>   0  27982 ImageLoaderMachO::bindLocation(ImageLoader::LinkContext const&,
> unsigned long, unsigned long, ImageLoader const*, unsigned char:entry
>   0  30491                       puts:entry
>   0  28559                     strlen:entry
>   0  28719                 __sfvwrite:entry
>   0  29640                  __swsetup:entry
>   0  28749                    __sinit:entry
>   0  28571                    sysconf:entry
>   0  28750                  getrlimit:entry
>   0  28751                __getrlimit:entry
>   0  29641                 __smakebuf:entry
>   0  29642                 __swhatbuf:entry
>   0  28684              fstat$INODE64:entry
>   0  29812                     isatty:entry
>   0  28723                      ioctl:entry
>   0  28724                    __ioctl:entry
>   0  28549                     malloc:entry
>   0  28574         malloc_zone_malloc:entry
>   0  28575               szone_malloc:entry
>   0  28576  szone_malloc_should_clear:entry
>   0  28640 small_malloc_from_free_list:entry
>   0  28553             allocate_pages:entry
>   0  28554                       mmap:entry
>   0  28555                     __mmap:entry
>   0  28578                     munmap:entry
>   0  28578                     munmap:entry
>   0  29393                     memchr:entry
>   0  28523                     memcpy:entry
>   0  29393                     memchr:entry
>   0  28523                     memcpy:entry
>   0  29719                   __fflush:entry
>   0  29643                   __sflush:entry
>   0  29644                    _swrite:entry
>   0  29645                   __swrite:entry
>   0  29646             write$NOCANCEL:entry
>   0  28463               stub helpers:entry
>   0  51054           dyld_stub_binder:entry
>   0  28697 _dyld_fast_stub_entry(void*, long):entry
>   0  27717 dyld::fastBindLazySymbol(ImageLoader**, unsigned long):entry
>   0  28106 ImageLoaderMachOCompressed::doBindFastLazySymbol(unsigned int,
> ImageLoader::LinkContext const&):entry
>   0  28010 ImageLoaderMachO::segActualLoadAddress(unsigned int)
> const:entry
>   0  28074 ImageLoaderMachOCompressed::segmentCommandOffsets() const:entry
>   0  28090 ImageLoaderMachOCompressed::resolve(ImageLoader::LinkContext
> const&, char const*, unsigned char, int, ImageLoader const**, Imag:entry
>   0  28075 ImageLoaderMachOCompressed::libImage(unsigned int) const:entry
>   0  28088
> ImageLoaderMachOCompressed::resolveTwolevel(ImageLoader::LinkContext const&,
> ImageLoader const*, bool, char const*, ImageLoader:entry
>   0  28002 ImageLoaderMachO::findExportedSymbol(char const*, bool,
> ImageLoader const**) const:entry
>   0  28102 ImageLoaderMachOCompressed::findExportedSymbol(char const*,
> ImageLoader const**) const:entry
>   0  27974 ImageLoaderMachO::getExportedSymbolAddress(ImageLoader::Symbol
> const*, ImageLoader::LinkContext const&, ImageLoader const*) con:entry
>   0  27973 ImageLoaderMachO::getSymbolAddress(ImageLoader::Symbol const*,
> ImageLoader const*, ImageLoader::LinkContext const&) const:entry
>   0  28101
> ImageLoaderMachOCompressed::exportedSymbolAddress(ImageLoader::Symbol
> const*) const:entry
>   0  27982 ImageLoaderMachO::bindLocation(ImageLoader::LinkContext const&,
> unsigned long, unsigned long, ImageLoader const*, unsigned char:entry
>   0  28726                       exit:entry
>   0  28727             __cxa_finalize:entry
>   0  27719 dyld::runTerminators(void*):entry
>   0  27701 dyld::notifyBatchPartial(dyld_image_states, bool, char const*
> (*)(dyld_image_states, unsigned int, dyld_image_info const*)):entry
>   0  28728         pthread_key_delete:entry
>   0 126037                    __tcf_0:entry
>   0  29716                   _cleanup:entry
>   0  29717                     _fwalk:entry
>   0  29643                   __sflush:entry
>   0  29643                   __sflush:entry
>   0  29643                   __sflush:entry
>   0  28729                      _exit:entry
>   2  50753                     cerror:entry
>   2  28752     cthread_set_errno_self:entry
>   2  28614                    __error:entry
>   2  28614                    __error:entry
>   2  28463               stub helpers:entry
>   2  51054           dyld_stub_binder:entry
>   2  28697 _dyld_fast_stub_entry(void*, long):entry
>   2  27717 dyld::fastBindLazySymbol(ImageLoader**, unsigned long):entry
>   2  28106 ImageLoaderMachOCompressed::doBindFastLazySymbol(unsigned int,
> ImageLoader::LinkContext const&):entry
>   2  28010 ImageLoaderMachO::segActualLoadAddress(unsigned int)
> const:entry
>   2  28074 ImageLoaderMachOCompressed::segmentCommandOffsets() const:entry
>   2  28090 ImageLoaderMachOCompressed::resolve(ImageLoader::LinkContext
> const&, char const*, unsigned char, int, ImageLoader const**, Imag:entry
>   2  28075 ImageLoaderMachOCompressed::libImage(unsigned int) const:entry
>   2  28088
> ImageLoaderMachOCompressed::resolveTwolevel(ImageLoader::LinkContext const&,
> ImageLoader const*, bool, char const*, ImageLoader:entry
>   2  28002 ImageLoaderMachO::findExportedSymbol(char const*, bool,
> ImageLoader const**) const:entry
>   2  28102 ImageLoaderMachOCompressed::findExportedSymbol(char const*,
> ImageLoader const**) const:entry
>
> On Dec 7, 2010, at 5:09 PM, Hans Stimer wrote:
>
> Thank you for the quick response. I tried a number of things and got some
> interesting results. In short:
>
> 1) pid doesn't work with -c date, but does seem to work with other
> executables. On osx date is an executable and not a script or built in.
> 2) pid doesn't let you instrument all entries; I created a hello world
> program and dtrace didn't return for over 5 minutes
>
> * Modify to point to hello world program:
> $ sudo dtrace -n 'pid$target:::entry { trace(arg0); }' -c ./out
> dtrace: description 'pid$target:::entry ' matched 7947 probes
> ^C
> I gave it over 5 minutes and it didn't return
>
> * Trace everything connected to date:
> $ sudo dtrace -n 'pid$target:::entry { trace(arg0); }' -c date
> Tue Dec  7 13:49:34 PST 2010
> dtrace: invalid probe specifier pid$target:::entry { trace(arg0); }: failed
> to create entry probe for 'stub_binding_helper': No such process
>
> * Find entry points for date
> $ sudo dtrace -ln 'pid$target:::entry,pid$target:::return' -c date
> Tue Dec  7 13:52:55 PST 2010
> dtrace: invalid probe specifier pid$target:::entry,pid$target:::return:
> failed to create entry probe for 'stub_binding_helper': No such process
>
> * Find entry points for hello world program:
> $ sudo dtrace -ln 'pid$target:::entry,pid$target:::return' -c ./out
>    ID   PROVIDER            MODULE                          FUNCTION NAME
> 144623   pid95634              dyld               stub_binding_helper entry
> 144624   pid95634              dyld                  dyld_func_lookup entry
> 144625   pid95634              dyld    offset_to_dyld_all_image_infos entry
> 144626   pid95634              dyld                       _dyld_start entry
> 144627   pid95634              dyld                  dyld_fatal_error entry
> .
> .
> .
>
> * Find entry points for top:
> $ sudo dtrace -ln 'pid$target:::entry,pid$target:::return' -c top
>    ID   PROVIDER            MODULE                          FUNCTION NAME
> 36684   pid95691              dyld                       _dyld_start entry
> 36685   pid95691              dyld std::vector<dyld_image_info,
> std::allocator<dyld_image_info>
> >::erase(__gnu_cxx::__normal_iterator<dyld_image_info*, std::vecto entry
> 36686   pid95691              dyld std::_Vector_base<dyld_image_info,
> std::allocator<dyld_image_info> >::~_Vector_base() entry
> 36687   pid95691              dyld                  dyld_fatal_error entry
> .
> .
> .
>
>
>
> On Tue, Dec 7, 2010 at 12:27 PM, Jim Mauro <james.ma...@oracle.com> wrote:
>
>>
>> When you say "straight from the dtrace book", I assume you mean
>> the soon-to-be-published book?
>>
>> If that is the case, please allow me to clarify. Not every invocation of
>> dtrace,
>> both one-liners and scripts, that are in the book (and there are hundreds)
>> is
>> tested and guaranteed to work under all three operating systems
>> (Solaris, OS X, FreeBSD). In fact, some will not work across different
>> Solaris
>> releases, depending on (for example) which provider is used.
>>
>> We are very clear in the book with our examples about the differences in
>> the underlying implementations. There are a great many scripts and
>> one-liners
>> in the book that will only work on Solaris.
>>
>> The good news is that, in addition to the actual examples, there is a lot
>> of
>> emphasis on methodology in the book, such that you can use DTrace
>> to figure out which probes/modules, etc, you should be instrumenting
>> based on the problem you are trying to solve or what you are trying
>> to observe.
>>
>> For example, if you change your D to;
>>
>> pid$target:::entry { @[probemod] = count(); }'
>>
>> You will see what the actual module names are available for you
>> to instrument.
>>
>> Binaries on OS X link to libSystem.B.dylib for common functions.
>>
>> Thanks
>> /jim
>>
>> On Dec 7, 2010, at 3:09 PM, Hans Stimer wrote:
>>
>> > Under osx 10.6.5:
>> >
>> > ~ $ sudo dtrace -n 'pid$target:libc::entry { @[probefunc] = count(); }'
>> -c date
>> > Tue Dec  7 11:40:59 PST 2010
>> > dtrace: invalid probe specifier pid$target:libc::entry { @[probefunc] =
>> count(); }: probe description pid94942:libc::entry does not match any probes
>> >
>> > This is an example straight from the dtrace book which claims to test
>> under osx, so I'm guessing that something broke in osx?
>> > _______________________________________________
>> > dtrace-discuss mailing list
>> > dtrace-discuss@opensolaris.org
>>
>>
>
>
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to