1#!/usr/sbin/dtrace -s 2 3/* 4 * Copyright (c) 2010-2013 Apple Inc. All rights reserved. 5 * 6 * @APPLE_APACHE_LICENSE_HEADER_START@ 7 * 8 * Licensed under the Apache License, Version 2.0 (the "License"); 9 * you may not use this file except in compliance with the License. 10 * You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 * 20 * @APPLE_APACHE_LICENSE_HEADER_END@ 21 */ 22 23/* 24 * Usage: dispatch_trace.d -p [pid] 25 * traced process must have been executed with 26 * DYLD_LIBRARY_PATH=/usr/lib/system/introspection or with 27 * DYLD_IMAGE_SUFFIX=_profile or DYLD_IMAGE_SUFFIX=_debug 28 */ 29 30#pragma D option quiet 31#pragma D option zdefs 32#pragma D option bufsize=16m 33 34BEGIN { 35 printf("%-8s %-3s %-8s %-35s%-15s%-?s %-43s%-?s %-14s%-?s %s\n", 36 "Time us", "CPU", "Thread", "Function", "Probe", "Queue", "Label", 37 "Item", "Kind", "Context", "Symbol"); 38} 39 40dispatch$target:libdispatch*.dylib::queue-push, 41dispatch$target:libdispatch*.dylib::queue-pop, 42dispatch$target:libdispatch*.dylib::callout-entry, 43dispatch$target:libdispatch*.dylib::callout-return /!start/ { 44 start = walltimestamp; 45} 46 47/* 48 * Trace queue push and pop operations: 49 * 50 * probe queue-push/-pop(dispatch_queue_t queue, const char *label, 51 * dispatch_object_t item, const char *kind, 52 * dispatch_function_t function, void *context) 53 */ 54dispatch$target:libdispatch*.dylib::queue-push, 55dispatch$target:libdispatch*.dylib::queue-pop { 56 printf("%-8d %-3d 0x%08p %-35s%-15s0x%0?p %-43s0x%0?p %-14s0x%0?p", 57 (walltimestamp-start)/1000, cpu, tid, probefunc, probename, arg0, 58 copyinstr(arg1, 42), arg2, copyinstr(arg3, 13), arg5); 59 usym(arg4); 60 printf("\n"); 61} 62 63/* 64 * Trace callouts to client functions: 65 * 66 * probe callout-entry/-return(dispatch_queue_t queue, const char *label, 67 * dispatch_function_t function, void *context) 68 */ 69dispatch$target:libdispatch*.dylib::callout-entry, 70dispatch$target:libdispatch*.dylib::callout-return { 71 printf("%-8d %-3d 0x%08p %-35s%-15s0x%0?p %-43s%-?s %-14s0x%0?p", 72 (walltimestamp-start)/1000, cpu, tid, probefunc, probename, arg0, 73 copyinstr(arg1, 42), "", "", arg3); 74 usym(arg2); 75 printf("\n"); 76} 77