Fix Bugs Faster Using Activity Tracing

Similar documents
Power, Performance, and Diagnostics

Finding Bugs Using Xcode Runtime Tools

Advanced Debugging and the Address Sanitizer

Using and Extending the Xcode Source Editor

Building Watch Apps #WWDC15. Featured. Session 108. Neil Desai watchos Engineer

What s New in Xcode App Signing

Implementing UI Designs in Interface Builder

Writing Energy Efficient Code

Accessibility on OS X

Kevin van Vechten Core OS

What s New in the LLVM Compiler. Chris Lattner LLVM Chief Architect

Cross Platform Nearby Networking

Mastering Xcode for iphone OS Development Part 1. Todd Fernandez Sr. Manager, IDEs

Your Apps and the Future of macos Security

Mastering Xcode for iphone OS Development Part 2. Marc Verstaen Sr. Manager, iphone Tools

Working with Metal Overview

Game Center Techniques, Part 1

What's New in UIKit Dynamics and Visual Effects Session 229

Introducing the Modern WebKit API

PROCESS CONTROL BLOCK TWO-STATE MODEL (CONT D)

Creating Great App Previews

Integration Service. Admin Console User Guide. On-Premises

User Namespaces. Linux Capabilities and Namespaces. Outline. Michael Kerrisk, man7.org c 2018 March 2018

Introducing the Photos Frameworks

Exception Codes and Module Numbers Used in Cisco Unified MeetingPlace Express

DEBUGGING: DYNAMIC PROGRAM ANALYSIS

Systems Design and Implementation I.4 Naming in a Multiserver OS

Error Message Reference

What s New in LLDB. Debug your way to fame and glory #WWDC15. Developer Tools. Session 402

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility

PROCESSES. Jo, Heeseung

Processes. Jo, Heeseung

Advanced Memory Analysis with Instruments. Daniel Delwood Performance Tools Engineer

Thread Sanitizer and Static Analysis

Address Book for iphone

What's New in Foundation Networking

CSE 565 Computer Security Fall 2018

Integration Service. Admin Console User Guide. On-Premises

What s New in Notifications

414-S17 (Shankar) Exam 1 PRACTICE PROBLEMS SOLUTIONS Page 1/7

Process management. What s in a process? What is a process? The OS s process namespace. A process s address space (idealized)

Virtual Memory 1. Virtual Memory

Virtual Memory 1. Virtual Memory

Debugging Your CUDA Applications With CUDA-GDB

CSE 410: Computer Systems Spring Processes. John Zahorjan Allen Center 534

ENGR 3950U / CSCI 3020U Midterm Exam SOLUTIONS, Fall 2012 SOLUTIONS

Introducing On Demand Resources

Seamless Linking to Your App

CSE 451: Operating Systems Winter Module 4 Processes. Mark Zbikowski Allen Center 476

Introducing SiriKit. Hey Siri, say hello to apps #WWDC16. App Frameworks. Session 217

PYTHON TRAINING COURSE CONTENT

Dynamic Tracing and Instrumentation

Audio Unit Extensions

Informatica Ultra Messaging Streaming Edition Version Release Notes June Contents. New Features and Enhancements.

Mastering Drag and Drop

OS lpr. www. nfsd gcc emacs ls 1/27/09. Process Management. CS 537 Lecture 3: Processes. Example OS in operation. Why Processes? Simplicity + Speed

What s New in CloudKit

Adapting to the New UI of OS X Yosemite

CSE 410: Systems Programming

Understanding Undefined Behavior

Getting the Most Out of HealthKit

CMPSC 311- Introduction to Systems Programming Module: Debugging

Grand Central Dispatch and NSOperation. CSCI 5828: Foundations of Software Engineering Lecture 28 12/03/2015

Troubleshooting Cisco Unified JTAPI

What s New in Energy Debugging

TECH TIP. Tritex Modbus Protocol Specification

Validating HTTP Live Streams

Announcement. Exercise #2 will be out today. Due date is next Monday

Creating Complications with ClockKit Session 209

Processes. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

The Extended MBR (version 1.05) (dated: 01 Nov 2018) by Benjamin David Lunt Copyright (c) Forever Young Software

Memory may be insufficient. Memory may be insufficient.

CSE 333 Lecture 9 - storage

Utilities. Introduction. Working with SCE Platform Files. Working with Directories CHAPTER

These selected protocol definitions are extremely helpful in learning the

Error code. Description of the circumstances under which the problem occurred. Less than 200. Linux system call error.

Cisco Unified Serviceability

CMPSC 311- Introduction to Systems Programming Module: Debugging

Editing Media with AV Foundation

CSE 153 Design of Operating Systems Fall 2018

CHAPTER 2: SYSTEM STRUCTURES. By I-Chen Lin Textbook: Operating System Concepts 9th Ed.

Red Hat Developer Tools

What s New in watchos

Networking with NSURLSession

Wednesday, September 14, Chapter 3: Processes

Know your Unknowns. Techniques for analyzing unknown software. (and dynamic reversing in general)

Monetize and Promote Your App with iad

Deploying AirPrint in Enterprise

Reading Assignment 4. n Chapter 4 Threads, due 2/7. 1/31/13 CSE325 - Processes 1

System Error Code 1015 Iphone 3g On Mac Os >>>CLICK HERE<<<

AppleShare File Server 3.0 Control

Moyea Software Company

Zone-Based Firewall Logging Export Using NetFlow

QCOM Reference Guide

CS193P - Lecture 11. iphone Application Development. Text Input Presenting Content Modally

TotalView. Debugging Tool Presentation. Josip Jakić

Operating system security models

Troubleshooting Cisco Unified JTAPI

Quick Interaction Techniques for watchos

Mysteries of Auto Layout, Part 1

Transcription:

Core OS #WWDC14 Fix Bugs Faster Using Activity Tracing Session 714 Eric Clements Core OS Engineering 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

Overview

Overview Background

Overview Background Activities

Overview Background Activities Breadcrumbs

Overview Background Activities Breadcrumbs Trace messages

Overview Background Activities Breadcrumbs Trace messages Tools

Overview Background Activities Breadcrumbs Trace messages Tools Considerations

Background

Asynchronous Development

Asynchronous Development XPC, GCD and NSOperationQueue simplify complex tasks

Asynchronous Development XPC, GCD and NSOperationQueue simplify complex tasks Difficult to debug and diagnose issues

Asynchronous Development XPC, GCD and NSOperationQueue simplify complex tasks Difficult to debug and diagnose issues Privilege separation exacerbates the problem

Asynchronous Development XPC, GCD and NSOperationQueue simplify complex tasks Difficult to debug and diagnose issues Privilege separation exacerbates the problem Debug tools have not kept pace

Asynchronous Development XPC, GCD and NSOperationQueue simplify complex tasks Difficult to debug and diagnose issues Privilege separation exacerbates the problem Debug tools have not kept pace Existing logging mechanisms are insufficient

Diagnostic Challenges

Diagnostic Challenges Daemon! 9395 Thread_140181 9395 _dispatch_mgr_thread (in libdispatch.dylib) 9395 _dispatch_mgr_invoke (in libdispatch.dylib) 9395 kevent64 (in libsystem_kernel.dylib)! 9395 Thread_140182 9395 _dispatch_sig_thread (in libdispatch.dylib) 9395 _dispatch_sigsuspend (in libdispatch.dylib) 9395 sigsuspend_nocancel (in libsystem_kernel.dylib)

Diagnostic Challenges There s no way to tell that Daemon is blocking process A and B. Process A! 9395 Thread_140181 9395 _dispatch_mgr_thread (in libdispatch.dylib) 9395 _dispatch_mgr_invoke (in libdispatch.dylib) 9395 kevent64 (in libsystem_kernel.dylib)! 9395 Thread_140182 9395 _dispatch_sig_thread (in libdispatch.dylib) 9395 _dispatch_sigsuspend (in libdispatch.dylib) 9395 sigsuspend_nocancel (in libsystem_kernel.dylib) Process B! 9395 Thread_140181 9395 _dispatch_mgr_thread (in libdispatch.dylib) 9395 _dispatch_mgr_invoke (in libdispatch.dylib) 9395 kevent64 (in libsystem_kernel.dylib)! 9395 Thread_140182 9395 _dispatch_sig_thread (in libdispatch.dylib) 9395 _dispatch_sigsuspend (in libdispatch.dylib) 9395 sigsuspend_nocancel (in libsystem_kernel.dylib Daemon! 9395 Thread_140181 9395 _dispatch_mgr_thread (in libdispatch.dylib) 9395 _dispatch_mgr_invoke (in libdispatch.dylib) 9395 kevent64 (in libsystem_kernel.dylib)! 9395 Thread_140182 9395 _dispatch_sig_thread (in libdispatch.dylib) 9395 _dispatch_sigsuspend (in libdispatch.dylib) 9395 sigsuspend_nocancel (in libsystem_kernel.dylib)

Debugging Challenges

Debugging Challenges

Complexity of the OS Application opendirectory d gssd securityd

Complexity of the OS Application opendirectory d gssd securityd

Complex Crashes Program Time

Complex Crashes Program button click XPCService Daemon Time menu select key equiv XPCService menu select menu select Daemon

Complex Crashes Program button click Your query cannot be completed at this time! Daemon Time menu select key equiv XPCService menu select menu select Daemon

Goals

Goals Include additional data in diagnostic reports

Goals Include additional data in diagnostic reports Reduce the time guessing what, where, and when

Goals Include additional data in diagnostic reports Reduce the time guessing what, where, and when Understand interaction of actions over time

Goals Include additional data in diagnostic reports Reduce the time guessing what, where, and when Understand interaction of actions over time Lightweight and easy to use

Improving Crash Reports Crashed Thread:! Exception Type: Exception Codes:! 0 Dispatch queue: com.apple.main-thread EXC_CRASH (SIGABRT) 0x0000000000000000, 0x0000000000000000 Breadcrumb Trail (reverse chronological seconds): Additional info about key events leading up to crash 6 Query directory using NSRunLoop (Activity ID: 0x0000008f00000002) 15 Query directory using NSRunLoop! Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 com.apple.query-directory 0x00000001000027ea -[QDAppDelegate query:foundresults:error:] + 554 1 com.apple.opendirectory 0x00007fff9066ec88 delegate_callback + 388 2 com.apple.cfopendirectory 0x00007fff84750bed _query_perform + 568 3 com.apple.corefoundation 0x00007fff8964e1f1 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 16 com.apple.appkit 0x00007fff83c01a9e NSApplicationMain + 1778 17 com.apple.query-directory 0x0000000100001a82 main + 34 18 libdyld.dylib 0x00007fff874af5c9 start + 1! Activity ID: 0x0000008f00000002 Activity Name: sendaction: Activity Breadcrumb: Query directory using NSRunLoop Activity Running Time: 6.028601 sec Activity Failure Reason: none detected! Trace Messages (reverse chronological seconds): 5.866399 Query Directory 0x0000000100000000 IPC send Detailed messages associated with the crash point

OS X Performance 140 105 137 NSLog syslog Activity tracing Microseconds 70 87 75 62 62 35 41 15 10 6 MacPro 2008 MacBookPro 15" Late 2013 imac 27

ios Performance 1800 1350 1732 NSLog syslog Activity tracing Microseconds 900 1109 1225 450 539 291 309 6 2 2 iphone 4s iphone 5c ipad Air

Terminology Program XPCService Daemon Time XPCService Daemon

Terminology Program button click XPCService Daemon Time menu select key equiv XPCService menu select Daemon menu select Activity

Terminology Program XPCService Daemon Send mail button click Time menu select key equiv XPCService menu select Daemon Compose mail menu select Activity Breadcrumb

Terminology Program XPCService Daemon Send mail button click Time menu select key equiv XPCService menu select Daemon Compose mail menu select Activity Breadcrumb Trace messages

Terminology Program XPCService Daemon Send mail button click menu select Time key equiv XPCService diagnosticd menu select Daemon Compose mail menu select Activity Breadcrumb Trace messages

Activities

What is an Activity?

What is an Activity? Application Set of work triggered by an action opendirectoryd gssd securityd

What is an Activity? Application Set of work triggered by an action Explicitly defined set of work opendirectoryd gssd securityd

System Activity

System Activity System generated 64-bit identifier (AID)

System Activity System generated 64-bit identifier (AID) Autopropagated by the system

System Activity System generated 64-bit identifier (AID) Process A Autopropagated by the system Process B

System Activity System generated 64-bit identifier (AID) Process A Autopropagated by the system Q1 Q2 Q3 AID: 1 AID: 2 AID: 1 Process B Q1 Q2 Q3 AID: 1 AID: 1 AID: 2

Activities Over Time Program XPCService Daemon XPCService Time Daemon

Activities Over Time Program button click (AID: 5) XPCService (AID: 5) Daemon (AID: 5) Time menu select (AID: 4) key equiv (AID: 3) XPCService (AID: 3) menu select (AID: 2) menu select (AID: 1) Daemon (AID: 1) Activity

Activity Creation

Activity Creation Automatically generated by UIKit and AppKit for UI actions

Activity Creation Automatically generated by UIKit and AppKit for UI actions Explicitly created activities

Activity Creation Automatically generated by UIKit and AppKit for UI actions Explicitly created activities Detached activities Q1 Q2 Q3

Activity Creation Automatically generated by UIKit and AppKit for UI actions Explicitly created activities Detached activities Q1 Q2 Q3 AID: 1 AID: 1

Activity Creation Automatically generated by UIKit and AppKit for UI actions Explicitly created activities Detached activities Q1 Q2 Q3 AID: 1 AID: 2 AID: 1

Initiating Activities

Initiating Activities os_activity_initiate( Activity Name, flags, ^{ });

Initiating Activities os_activity_initiate( Activity Name, flags, ^{ }); Activity name must be a constant string

Initiating Activities os_activity_initiate( Activity Name, flags, ^{ }); Activity name must be a constant string Optional flags to control behavior

Initiating Activities os_activity_initiate( Activity Name, flags, ^{ }); Activity name must be a constant string Optional flags to control behavior Non block variants available

Initiating Activities os_activity_initiate( Activity Name, flags, ^{ }); Activity name must be a constant string Optional flags to control behavior Non block variants available #include <os/activity.h>

Automatically Generated Activities Process AppKit / UIKit Process Callback

Automatically Generated Activities Process AppKit / UIKit Process Callback os_activity_start();

Automatically Generated Activities Process AppKit / UIKit Process Callback os_activity_start(); - (IBAction)searchField:(id)sender { results = [self searchstring: searchvalue]; }

Automatically Generated Activities Process AppKit / UIKit Process Callback os_activity_start(); - (IBAction)searchField:(id)sender { results = [self searchstring: searchvalue]; } os_activity_stop();

Explicitly Create Activities #include <os/activity.h>! - (void)checkcaches { if (!verify) { /* a lot of work is done during initialization */ os_activity_initiate( verifying cache, OS_ACTIVITY_FLAG_DEFAULT, ^{ }); } }

Explicitly Create Activities #include <os/activity.h>! - (void)checkcaches { if (!verify) { /* a lot of work is done during initialization */ os_activity_initiate( verifying cache, OS_ACTIVITY_FLAG_DEFAULT, ^{ }); } }

Detached Activity #include <os/activity.h>! - (IBAction) searchfield:(id)sender { /* will be called with an activity already created */ if (async_reindex) { os_activity_initiate( reindex, OS_ACTIVITY_FLAG_DETACHED, ^{ /* issue re-index work detached from current activity */ }); }! } /* issue lookup based on original request */

Detached Activity #include <os/activity.h>! - (IBAction) searchfield:(id)sender { /* will be called with an activity already created */ if (async_reindex) { os_activity_initiate( reindex, OS_ACTIVITY_FLAG_DETACHED, ^{ /* issue re-index work detached from current activity */ }); }! } /* issue lookup based on original request */

Breadcrumbs

Breadcrumbs

Breadcrumbs Label meaningful activities

Breadcrumbs Label meaningful activities Macrolevel interactions over time

Breadcrumbs Label meaningful activities Button Send mail click Macrolevel interactions over time Menu select Key equivalent Menu select Compose Menu select mail

Breadcrumbs Label meaningful activities Macrolevel interactions over time Send mail Button click Menu select Key equivalent Menu select Compose mail Menu select

Breadcrumb Diagram Program button click (AID: 5) XPCService (AID: 5) Daemon (AID: 5) Time menu select (AID: 4) key equivalent (AID: 3) XPCService (AID: 3) menu select (AID: 2) menu select (AID: 1) Daemon (AID: 1) Activity

Breadcrumb Diagram Send mail Program button click (AID: 5) XPCService (AID: 5) Daemon (AID: 5) Time menu select (AID: 4) key equivalent (AID: 3) XPCService (AID: 3) menu select (AID: 2) Daemon Compose mail menu select (AID: 1) (AID: 1) Activity Breadcrumb

Adding a Breadcrumb

Adding a Breadcrumb os_activity_set_breadcrumb( composing mail );

Adding a Breadcrumb os_activity_set_breadcrumb( composing mail ); Only supported by main process binary

Adding a Breadcrumb os_activity_set_breadcrumb( composing mail ); Only supported by main process binary Cannot be done from libraries, plugins, etc.

Adding a Breadcrumb os_activity_set_breadcrumb( composing mail ); Only supported by main process binary Cannot be done from libraries, plugins, etc. Constant string must be provided

Adding a Breadcrumb os_activity_set_breadcrumb( composing mail ); Only supported by main process binary Cannot be done from libraries, plugins, etc. Constant string must be provided #include <os/activity.h>

Breadcrumb Example #include <os/activity.h>! - (IBAction)searchField:(id)sender { if (usecache) { os_activity_set_breadcrumb( searching cache ); db = [self _cache]; } else { os_activity_set_breadcrumb( searching database ); db = [self _database]; } [db search:sender]; }

Breadcrumb Example #include <os/activity.h>! - (IBAction)searchField:(id)sender { if (usecache) { os_activity_set_breadcrumb( searching cache ); db = [self _cache]; } else { os_activity_set_breadcrumb( searching database ); db = [self _database]; } [db search:sender]; }

Breadcrumb Example #include <os/activity.h>! - (IBAction)searchField:(id)sender { if (usecache) { os_activity_set_breadcrumb( searching cache ); db = [self _cache]; } else { os_activity_set_breadcrumb( searching database ); db = [self _database]; } [db search:sender]; }

Trace Messages

Trace Messages

Trace Messages New API to add trace messages to an activity

Trace Messages New API to add trace messages to an activity Uses standard printf-style format strings

Trace Messages New API to add trace messages to an activity Uses standard printf-style format strings Lightweight

Trace Messages New API to add trace messages to an activity Uses standard printf-style format strings Lightweight Adjustable behavior

Trace Messages New API to add trace messages to an activity Uses standard printf-style format strings Lightweight Adjustable behavior Stored in an in-memory ring buffer

Trace Messages New API to add trace messages to an activity Uses standard printf-style format strings Lightweight Adjustable behavior Stored in an in-memory ring buffer PC Timestamp String Offset Data1 Data2 (64-bytes) PC Timestamp String Offset Data1 Data2 PC Timestamp String Offset Data1 Data2 PC Timestamp String Offset Data1 Data2

Trace Message

Trace Message os_trace( Interface %ld state %d, ifindex, state);

Trace Message os_trace( Interface %ld state %d, ifindex, state); Supports printf-style format strings

Trace Message os_trace( Interface %ld state %d, ifindex, state); Supports printf-style format strings Only scalar format types

Trace Message os_trace( Interface %ld state %d, ifindex, state); Supports printf-style format strings Only scalar format types Strings and characters are not supported for privacy, performance, and security

Trace Message os_trace( Interface %ld state %d, ifindex, state); Supports printf-style format strings Only scalar format types Strings and characters are not supported for privacy, performance, and security #include <os/trace.h>

Debug Trace Message

Debug Trace Message os_trace_debug( Open socket %d total time %2.3f ms, sock, ttime);

Debug Trace Message os_trace_debug( Open socket %d total time %2.3f ms, sock, ttime); Only saved to ring buffer under debug mode

Debug Trace Message os_trace_debug( Open socket %d total time %2.3f ms, sock, ttime); Only saved to ring buffer under debug mode Additional resources used if debug mode is enabled

Debug Trace Message os_trace_debug( Open socket %d total time %2.3f ms, sock, ttime); Only saved to ring buffer under debug mode Additional resources used if debug mode is enabled Setting environment variable will enable debug at launch

Debug Trace Message os_trace_debug( Open socket %d total time %2.3f ms, sock, ttime); Only saved to ring buffer under debug mode Additional resources used if debug mode is enabled Setting environment variable will enable debug at launch OS_ACTIVITY_MODE=debug

Payload Trace Message

Payload Trace Message os_trace_with_payload( Interface: %ld, ifindex, ^(xpc_object_t xdict) { }); xpc_dictionary_set_string(xdict, ifname, ifname);

Payload Trace Message os_trace_with_payload( Interface: %ld, ifindex, ^(xpc_object_t xdict) { xpc_dictionary_set_string(xdict, ifname, ifname); }); Block is only called if tools have enabled stream mode

Payload Trace Message os_trace_with_payload( Interface: %ld, ifindex, ^(xpc_object_t xdict) { xpc_dictionary_set_string(xdict, ifname, ifname); }); Block is only called if tools have enabled stream mode Uses XPC to deliver message to diagnosticd

Payload Trace Message os_trace_with_payload( Interface: %ld, ifindex, ^(xpc_object_t xdict) { xpc_dictionary_set_string(xdict, ifname, ifname); }); Block is only called if tools have enabled stream mode Uses XPC to deliver message to diagnosticd Setting environment variable will enable stream mode at launch

Payload Trace Message os_trace_with_payload( Interface: %ld, ifindex, ^(xpc_object_t xdict) { xpc_dictionary_set_string(xdict, ifname, ifname); }); Block is only called if tools have enabled stream mode Uses XPC to deliver message to diagnosticd Setting environment variable will enable stream mode at launch OS_ACTIVITY_MODE=stream

Trace Messages Send mail Program button click XPCService Daemon Time menu select key equivalent XPCService menu select Compose mail menu select Daemon Activity Breadcrumb

Trace Messages Send mail Program button click XPCService Daemon Time menu select key equivalent XPCService menu select Compose mail menu select Daemon Activity Breadcrumb Trace messages

Sample Crash Crashed Thread:! Exception Type: Exception Codes:! 0 Dispatch queue: com.apple.main-thread EXC_CRASH (SIGABRT) 0x0000000000000000, 0x0000000000000000 Breadcrumb Trail (reverse chronological seconds): 6 Additional Query directory info about using NSRunLoop key events (Activity leading ID: 0x0000008f00000002) up to crash 15 Query directory using NSRunLoop! Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 com.apple.query-directory 0x00000001000027ea -[QDAppDelegate query:foundresults:error:] + 554 1 com.apple.opendirectory 0x00007fff9066ec88 delegate_callback + 388 2 com.apple.cfopendirectory 0x00007fff84750bed _query_perform + 568 3 com.apple.corefoundation 0x00007fff8964e1f1 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 16 com.apple.appkit 0x00007fff83c01a9e NSApplicationMain + 1778 17 com.apple.query-directory 0x0000000100001a82 main + 34 18 libdyld.dylib 0x00007fff874af5c9 start + 1! Activity ID: 0x0000008f00000002 Activity Name: sendaction: Activity Breadcrumb: Query directory using NSRunLoop Activity Running Time: 6.028601 sec Activity Failure Reason: none detected! Trace Messages (reverse chronological seconds): 5.866399 Query Directory 0x0000000100000000 IPC send 5.866463 Query Directory Detailed messages 0x00000001000027e0 associated aborting with the test crash due to no point results 5.866529 Query Directory 0x0000000100000000 IPC send 5.866564 Query Directory 0x0000000100002243 skipping record with UID 210 (not member of 'admin') 5.866583 opendirectoryd 0xffffffff00000000 IPC send 5.866596 opendirectoryd 0xffffffff00021c21 request completed, delivered 1 results 5.866803 opendirectoryd 0xffffffff00021640 UID: 4129, EUID: 4129, GID: 11, EGID: 11 5.866863 opendirectoryd 0xffffffff00000000 IPC receive 5.866883 Query Directory 0x0000000100000000 IPC send

Sample Crash Crashed Thread:! Exception Type: Exception Codes:! 0 Dispatch queue: com.apple.main-thread EXC_CRASH (SIGABRT) 0x0000000000000000, 0x0000000000000000 Breadcrumb Trail (reverse chronological seconds): 6 Query directory using NSRunLoop (Activity ID: 0x0000008f00000002) 15 Query directory using NSRunLoop Breadcrumb Trail (reverse chronological seconds): 6 Query directory using NSRunLoop (Activity ID: 0x0000008f00000002)! 15 Query directory using NSRunLoop Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 com.apple.query-directory 0x00000001000027ea -[QDAppDelegate query:foundresults:error:] + 554 1 com.apple.opendirectory 0x00007fff9066ec88 delegate_callback + 388 2 com.apple.cfopendirectory 0x00007fff84750bed _query_perform + 568 3 com.apple.corefoundation 0x00007fff8964e1f1 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 16 com.apple.appkit 0x00007fff83c01a9e NSApplicationMain + 1778 17 com.apple.query-directory 0x0000000100001a82 main + 34 18 libdyld.dylib 0x00007fff874af5c9 start + 1! Activity ID: 0x0000008f00000002 Activity Name: sendaction: Activity Breadcrumb: Query directory using NSRunLoop Activity Running Time: 6.028601 sec Activity Failure Reason: none detected! Trace Messages (reverse chronological seconds): 5.866399 Query Directory 0x0000000100000000 IPC send 5.866463 Query Directory 0x00000001000027e0 aborting test due to no results 5.866529 Query Directory 0x0000000100000000 IPC send 5.866564 Query Directory 0x0000000100002243 skipping record with UID 210 (not member of 'admin') 5.866583 opendirectoryd 0xffffffff00000000 IPC send 5.866596 opendirectoryd 0xffffffff00021c21 request completed, delivered 1 results 5.866803 opendirectoryd 0xffffffff00021640 UID: 4129, EUID: 4129, GID: 11, EGID: 11 5.866863 opendirectoryd 0xffffffff00000000 IPC receive 5.866883 Query Directory 0x0000000100000000 IPC send

Sample Crash Crashed Thread:! Exception Type: Exception Codes: 0 Dispatch queue: com.apple.main-thread EXC_CRASH (SIGABRT) 0x0000000000000000, 0x0000000000000000! Breadcrumb Trail (reverse chronological seconds): 6 Query directory using NSRunLoop (Activity ID: 0x0000008f00000002) 15 Query directory using NSRunLoop! Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 com.apple.query-directory 0x00000001000027ea -[QDAppDelegate query:foundresults:error:] + 554 0x0000008f00000002 1 com.apple.opendirectory 0x00007fff9066ec88 delegate_callback + 388 2 com.apple.cfopendirectory 0x00007fff84750bed sendaction: _query_perform + 568 3 com.apple.corefoundation 0x00007fff8964e1f1 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17 Query directory using NSRunLoop 16 com.apple.appkit 0x00007fff83c01a9e NSApplicationMain + 1778 17 com.apple.query-directory 0x0000000100001a82 6.028601 main + 34 sec 18 libdyld.dylib 0x00007fff874af5c9 start + 1 Activity ID: Activity Name: Activity Breadcrumb: Activity Running Time:! Activity Failure Reason: none detected Activity ID: 0x0000008f00000002 Activity Name: sendaction: Activity Breadcrumb: Query directory using NSRunLoop Activity Running Time: 6.028601 sec Activity Failure Reason: none detected! Trace Messages (reverse chronological seconds): 5.866399 Query Directory 0x0000000100000000 IPC send 5.866463 Query Directory 0x00000001000027e0 aborting test due to no results 5.866529 Query Directory 0x0000000100000000 IPC send 5.866564 Query Directory 0x0000000100002243 skipping record with UID 210 (not member of 'admin') 5.866583 opendirectoryd 0xffffffff00000000 IPC send 5.866596 opendirectoryd 0xffffffff00021c21 request completed, delivered 1 results 5.866803 opendirectoryd 0xffffffff00021640 UID: 4129, EUID: 4129, GID: 11, EGID: 11 5.866863 opendirectoryd 0xffffffff00000000 IPC receive 5.866883 Query Directory 0x0000000100000000 IPC send

Sample Crash Crashed Thread:! 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x0000000000000000, 0x0000000000000000! Breadcrumb Trail (reverse chronological seconds): 6 Query directory using NSRunLoop (Activity ID: 0x0000008f00000002) 15 Query directory using NSRunLoop! Trace Thread Messages 0 Crashed:: (reverse Dispatch chronological queue: com.apple.main-thread seconds): 5.866399 0 com.apple.query-directory 0x00000001000027ea 0x0000000100000000 -[QDAppDelegate IPC query:foundresults:error:] send + 554 5.866463 1 com.apple.opendirectory Query 0x00007fff9066ec88 0x00000001000027e0 delegate_callback aborting + 388 test due to no results 5.866529 2 com.apple.cfopendirectory Query 0x00007fff84750bed 0x0000000100000000 _query_perform IPC + 568 send 5.866564 3 com.apple.corefoundation Query Directory 0x00007fff8964e1f1 0x0000000100002243 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION skipping record with UID 210 (not member + of 17 'admin') 5.866583 opendirectoryd 0xffffffff00000000 IPC send 16 com.apple.appkit 0x00007fff83c01a9e NSApplicationMain + 1778 5.866596 17 com.apple.query-directory opendirectoryd 0x0000000100001a82 0xffffffff00021c21 main + 34 request completed, delivered 1 results 18 libdyld.dylib 0x00007fff874af5c9 start + 1 5.866803! opendirectoryd 0xffffffff00021640 UID: 4129, EUID: 4129, GID: 11, EGID: 11 5.866863 Activity ID: opendirectoryd 0x0000008f00000002 0xffffffff00000000 IPC receive 5.866883 Activity Name: Query Directory sendaction: 0x0000000100000000 IPC send Activity Breadcrumb: Query directory using NSRunLoop Activity Running Time: 6.028601 sec Activity Failure Reason: none detected! Trace Messages (reverse chronological seconds): 5.866399 Query Directory 0x0000000100000000 IPC send 5.866463 Query Directory 0x00000001000027e0 aborting test due to no results 5.866529 Query Directory 0x0000000100000000 IPC send 5.866564 Query Directory 0x0000000100002243 skipping record with UID 210 (not member of 'admin') 5.866583 opendirectoryd 0xffffffff00000000 IPC send 5.866596 opendirectoryd 0xffffffff00021c21 request completed, delivered 1 results 5.866803 opendirectoryd 0xffffffff00021640 UID: 4129, EUID: 4129, GID: 11, EGID: 11 5.866863 opendirectoryd 0xffffffff00000000 IPC receive 5.866883 Query Directory 0x0000000100000000 IPC send

Crashing Process Send mail Program button click XPCService Daemon Time menu select key equivalent XPCService menu select Compose mail menu select Daemon Activity Breadcrumb Trace messages

Crashing Process Send mail Program button click XPCService Daemon Time menu select key equivalent XPCService menu select Compose mail menu select Daemon Activity Breadcrumb Trace messages

Crashing Process Send mail Program button click XPCService Daemon Time menu select key equivalent menu select XPCService diagnosticd Send mail button click Compose mail menu select Daemon Compose mail Activity Breadcrumb Trace messages

Reporting Unexpected Errors

Reporting Unexpected Errors os_trace_error( Interface %ld failed error %d, ifindex, errno);

Reporting Unexpected Errors os_trace_error( Interface %ld failed error %d, ifindex, errno); Signals that an error occurred

Reporting Unexpected Errors os_trace_error( Interface %ld failed error %d, ifindex, errno); Signals that an error occurred Trace messages are sent to diagnosticd

Reporting Fatal Errors

Reporting Fatal Errors os_trace_fault( invalid state %d - will likely crash, state);

Reporting Fatal Errors os_trace_fault( invalid state %d - will likely crash, state); Could be impending catastrophic failure (assert, abort, or crash)

Reporting Fatal Errors os_trace_fault( invalid state %d - will likely crash, state); Could be impending catastrophic failure (assert, abort, or crash) Trace messages from all involved processes sent to diagnosticd

Utilizing Faults Send mail Program button click XPCService Daemon Time menu select key equivalent XPCService menu select Compose mail menu select Daemon Activity Breadcrumb Trace messages

Utilizing Faults Send mail Program button click XPCService Daemon Time menu select key equivalent menu select XPCService diagnosticd Send mail button click Compose mail menu select Daemon Compose mail Activity Breadcrumb Trace messages

Example Fault #include <os/trace.h> #include <os/activity.h>! int main(int argc, char *argv[]) { os_activity_initiate( startup initialization, 0, ^{ os_trace_debug( passed %d args, argc); if (!_do_initialization(argc, argv)) { os_trace_fault( failed to initialize %d, errno); errx(ex_software, failed to initialize ); } }); }

Example Fault #include <os/trace.h> #include <os/activity.h>! int main(int argc, char *argv[]) { os_activity_initiate( startup initialization, 0, ^{ os_trace_debug( passed %d args, argc); if (!_do_initialization(argc, argv)) { os_trace_fault( failed to initialize %d, errno); errx(ex_software, failed to initialize ); } }); }

Supported Trace Messages

Supported Trace Messages os_trace( Running as UID: %d, GID: %d, geteuid(), getegid()); Running as UID: 501, GID: 20

Supported Trace Messages os_trace( Running as UID: %d, GID: %d, geteuid(), getegid()); Running as UID: 501, GID: 20 os_trace( Initialization phase - state: %d, flags: %ld, state, flags); Initialization phase - state: 32, flags: 2328

Supported Trace Messages os_trace( Running as UID: %d, GID: %d, geteuid(), getegid()); Running as UID: 501, GID: 20 os_trace( Initialization phase - state: %d, flags: %ld, state, flags); Initialization phase - state: 32, flags: 2328 os_trace( New client connection: %p, idle-disconnect: %d, connection, idle); New client connection: 0x23211382, idle-disconnect: 30

Supported Trace Messages os_trace( Running as UID: %d, GID: %d, geteuid(), getegid()); Running as UID: 501, GID: 20 os_trace( Initialization phase - state: %d, flags: %ld, state, flags); Initialization phase - state: 32, flags: 2328 os_trace( New client connection: %p, idle-disconnect: %d, connection, idle); New client connection: 0x23211382, idle-disconnect: 30 os_trace( Clients active: %d, average: %2.3f seconds, count, avg); Client max: 30, average: 35.253 seconds

Unsupported Trace Messages

Unsupported Trace Messages os_trace( Logged in as user %s on host %s, username, hostname); Logged in as user UNSUPPORTED_STRING on host UNSUPPORTED_STRING

Unsupported Trace Messages os_trace( Logged in as user %s on host %s, username, hostname); Logged in as user UNSUPPORTED_STRING on host UNSUPPORTED_STRING os_trace( Logged in as UID %d, password: %s, geteuid(), password); Logged in as UID 501, password: UNSUPPORTED_STRING

Unsupported Trace Messages os_trace( Logged in as user %s on host %s, username, hostname); Logged in as user UNSUPPORTED_STRING on host UNSUPPORTED_STRING os_trace( Logged in as UID %d, password: %s, geteuid(), password); Logged in as UID 501, password: UNSUPPORTED_STRING os_trace( Logged in using initial %c, initial[0]); Logged in using initial UNSUPPORTED_CHAR

There are Limits

There are Limits The format string cannot exceed 100 characters

There are Limits The format string cannot exceed 100 characters Trace message content has a limit and will truncate if exceeded

There are Limits The format string cannot exceed 100 characters Trace message content has a limit and will truncate if exceeded os_trace API will accept a maximum of 7 scalar values

There are Limits The format string cannot exceed 100 characters Trace message content has a limit and will truncate if exceeded os_trace API will accept a maximum of 7 scalar values Trace message buffer size may vary by platform and mode

Demo Crash reports

Debugger Support

Debugger Support Current activity running on thread

Debugger Support Current activity running on thread Trace messages for thread with an activity

Using lldb (lldb) thread info thread #1: tid = 0x1c93, 0x00007fff9452a37a libsystem_kernel.dylib` pthread_kill + 10, queue = 'com.apple.main-thread', activity = 'sendaction:', 5 messages, stop reason = signal SIGABRT Activity 'sendaction:', 0x4d00000002 Current Breadcrumb: Query directory using NSRunLoop 5 trace messages: aborting test due to no results skipping record with UID 210 (not member of 'admin') IPC send issued query canceling previous query for mode: 0

Using lldb (lldb) thread info thread #1: tid = 0x1c93, 0x00007fff9452a37a libsystem_kernel.dylib` pthread_kill + 10, queue = 'com.apple.main-thread', activity = 'sendaction:', 5 messages, stop reason = signal SIGABRT Activity 'sendaction:', 0x4d00000002 Current Breadcrumb: Query directory using NSRunLoop 5 trace messages: aborting test due to no results skipping record with UID 210 (not member of 'admin') IPC send issued query canceling previous query for mode: 0

Using lldb (lldb) thread info thread #1: tid = 0x1c93, 0x00007fff9452a37a libsystem_kernel.dylib` pthread_kill + 10, queue = 'com.apple.main-thread', activity = 'sendaction:', 5 messages, stop reason = signal SIGABRT Activity 'sendaction:', 0x4d00000002 Current Breadcrumb: Query directory using NSRunLoop 5 trace messages: aborting test due to no results skipping record with UID 210 (not member of 'admin') IPC send issued query canceling previous query for mode: 0

Demo Xcode

Tools

ostraceutil

ostraceutil Live streaming by process name or pid

ostraceutil Live streaming by process name or pid Watch for faults and errors

ostraceutil Live streaming by process name or pid Watch for faults and errors Inspect binaries for various activity tracing strings

Live Streaming [~] root% ostraceutil -watch -process Query\ Directory PID: 640 Timestamp: 1141.218854 RELEASE Activity ID: 0x0000007100000001 Trace ID: 0x00000100000047c7 Thread: 0x32a9 Image UUID: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image Path: /Demos/Query Directory.app/Contents/MacOS/Query Directory Offset: 0x30a7 Message: 'issued query' Payload: '<dictionary: 0x7fe7331004b0> { count = 1, contents = "querystring" => <string: 0x7fe733100580> { length = 1, contents = "z" } }' ---------------------- Timestamp: 0.000000 DEBUG Trace ID: 0x0000020000004a30 Offset: 0x291f Message: 'query results received 1 more results' ---------------------- Timestamp: 1141.252109 RELEASE Trace ID: 0x00000100000046c0 Offset: 0x2243 Message: 'skipping record with UID 210 (not member of 'admin')' Payload: '<dictionary: 0x7fe730404800> { count = 2, contents = "full name" => <string: 0x7fe730403dd0> { length = 18, contents = "AutoTimeZoneDaemon" } "name" => <string: 0x7fe730404910> { length = 9, contents = "_timezone" } }'

Live Streaming [~] root% ostraceutil -watch -process Query\ Directory PID: 640 Timestamp: 1141.218854 RELEASE Activity ID: 0x0000007100000001 Trace ID: 0x00000100000047c7 Thread: 0x32a9 Image UUID: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image Path: /Demos/Query Directory.app/Contents/MacOS/Query Directory Offset: 0x30a7 Message: 'issued query' Payload: '<dictionary: 0x7fe7331004b0> { count = 1, contents = "querystring" => <string: 0x7fe733100580> { length = 1, contents = "z" } }' ---------------------- Timestamp: 0.000000 DEBUG Trace ID: 0x0000020000004a30 Offset: 0x291f Message: 'query results received 1 more results' ---------------------- Timestamp: 1141.252109 RELEASE Trace ID: 0x00000100000046c0 Offset: 0x2243 Message: 'skipping record with UID 210 (not member of 'admin')' Payload: '<dictionary: 0x7fe730404800> { count = 2, contents = "full name" => <string: 0x7fe730403dd0> { length = 18, contents = "AutoTimeZoneDaemon" } "name" => <string: 0x7fe730404910> { length = 9, contents = "_timezone" } }' [~] root% ostraceutil -watch -process Query\ Directory

Live Streaming [~] root% ostraceutil -watch -process Query\ Directory PID: 640 Timestamp: 1141.218854 RELEASE Activity ID: 0x0000007100000001 Trace ID: 0x00000100000047c7 Thread: 0x32a9 Image UUID: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image Path: /Demos/Query Directory.app/Contents/MacOS/Query Directory Offset: 0x30a7 Message: 'issued query' Payload: '<dictionary: 0x7fe7331004b0> { count = 1, contents = "querystring" => <string: 0x7fe733100580> { length = 1, contents = "z" } }' ---------------------- Timestamp: 0.000000 DEBUG Trace ID: 0x0000020000004a30 Offset: 0x291f Message: 'query results received 1 more results' ---------------------- Timestamp: 1141.252109 RELEASE Trace ID: 0x00000100000046c0 Offset: 0x2243 Message: 'skipping record with UID 210 (not member of 'admin')' Payload: '<dictionary: 0x7fe730404800> { count = 2, contents = "full name" => <string: 0x7fe730403dd0> { length = 18, contents = "AutoTimeZoneDaemon" } "name" => <string: 0x7fe730404910> { length = 9, contents = "_timezone" } }' Payload: '<dictionary: 0x7fe7331004b0> { count = 1, contents = }' "querystring" => <string: 0x7fe733100580> { length = 1, contents = "z" }

Watching Faults [~] root% ostraceutil -watch -faults Process: ================== PID: 557 Image_uuid: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image_path: /Demos/Debug/Query Directory.app/Contents/MacOS/Query Directory! Application Breadcrumbs: ================== Timestamp: 996.368669, Breadcrumb ID = 19072, Name = 'Query directory using NSOperationQueue', Activity ID: 0x0000005300000008 Timestamp: 1001.556305, Breadcrumb ID = 19040, Name = 'Query directory using NSRunLoop', Activity ID: 0x000000530000000d! Activity: ================== Activity ID: 0x000000530000000d Activity Name: sendaction: Timestamp: 1001.556262 Reason: none detected! Messages: ================== Timestamp: 1001.589870 RELEASE Activity ID: 0x000000530000000d Trace ID: 0x000001000005d530 Thread: 0x2821 Image UUID: DECA11C7-EB99-3885-947E-42DBD0F9374C Image Path: /usr/libexec/opendirectoryd Offset: 0x21c21 Message: 'request completed, delivered 1 results' ----------------------

Watching Faults [~] root% ostraceutil -watch -faults Process: ================== PID: 557 [~] root% ostraceutil -watch -faults Image_uuid: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image_path: /Demos/Debug/Query Directory.app/Contents/MacOS/Query Directory! Application Breadcrumbs: ================== Timestamp: 996.368669, Breadcrumb ID = 19072, Name = 'Query directory using NSOperationQueue', Activity ID: 0x0000005300000008 Timestamp: 1001.556305, Breadcrumb ID = 19040, Name = 'Query directory using NSRunLoop', Activity ID: 0x000000530000000d! Activity: ================== Activity ID: 0x000000530000000d Activity Name: sendaction: Timestamp: 1001.556262 Reason: none detected! Messages: ================== Timestamp: 1001.589870 RELEASE Activity ID: 0x000000530000000d Trace ID: 0x000001000005d530 Thread: 0x2821 Image UUID: DECA11C7-EB99-3885-947E-42DBD0F9374C Image Path: /usr/libexec/opendirectoryd Offset: 0x21c21 Message: 'request completed, delivered 1 results' ----------------------

Watching Faults [~] root% ostraceutil -watch -faults Process: ================== PID: 557 Image_uuid: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image_path: /Demos/Debug/Query Directory.app/Contents/MacOS/Query Directory! Application Breadcrumbs: ================== Timestamp: 996.368669, Breadcrumb ID = 19072, Name = 'Query directory using NSOperationQueue', Activity ID: 0x0000005300000008 Timestamp: 1001.556305, Breadcrumb ID = 19040, Name = 'Query directory using NSRunLoop', Activity ID: 0x000000530000000d! Activity: ================== Activity ID: 0x000000530000000d Activity Name: sendaction: Timestamp: 1001.556262 Reason: none detected! Messages: ================== Timestamp: 1001.589870 RELEASE Activity ID: 0x000000530000000d Trace ID: 0x000001000005d530 Thread: 0x2821 Image UUID: DECA11C7-EB99-3885-947E-42DBD0F9374C Image Path: /usr/libexec/opendirectoryd Offset: 0x21c21 Message: 'request completed, delivered 1 results' ---------------------- Process: ================== PID: 557 Image_uuid: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image_path: /Demos/Debug/Query Directory.app/Contents/MacOS/Query Directory

Watching Faults [~] root% ostraceutil -watch -faults Process: ================== PID: 557 Image_uuid: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image_path: /Demos/Debug/Query Directory.app/Contents/MacOS/Query Directory! Application Breadcrumbs: ================== Application Breadcrumbs: Timestamp: 996.368669, Breadcrumb ID = 19072, Name = 'Query directory using NSOperationQueue', Activity ID: 0x0000005300000008 Timestamp: ================== 1001.556305, Breadcrumb ID = 19040, Name = 'Query directory using NSRunLoop', Activity ID: 0x000000530000000d! Timestamp: 996.368669, Breadcrumb ID = 19072, Name = 'Query Activity: ================== Timestamp: 1001.556305, Breadcrumb ID = 19040, Name = 'Query Activity ID: 0x000000530000000d Activity Name: sendaction: Timestamp: 1001.556262 Reason: none detected! Messages: ================== Timestamp: 1001.589870 RELEASE Activity ID: 0x000000530000000d Trace ID: 0x000001000005d530 Thread: 0x2821 Image UUID: DECA11C7-EB99-3885-947E-42DBD0F9374C Image Path: /usr/libexec/opendirectoryd Offset: 0x21c21 Message: 'request completed, delivered 1 results' ----------------------

Watching Faults [~] root% ostraceutil -watch -faults Process: ================== PID: 557 Image_uuid: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image_path: /Demos/Debug/Query Directory.app/Contents/MacOS/Query Directory! Application Breadcrumbs: ================== Timestamp: 996.368669, Breadcrumb ID = 19072, Name = 'Query directory using NSOperationQueue', Activity ID: 0x0000005300000008 Timestamp: 1001.556305, Breadcrumb ID = 19040, Name = 'Query directory using NSRunLoop', Activity ID: 0x000000530000000d! Activity: Activity: ================== Activity ID: 0x000000530000000d ================== Activity Name: sendaction: Timestamp: 1001.556262 Activity ID: 0x000000530000000d Reason: none detected Activity Name: sendaction:! Messages: Timestamp: 1001.556262 ================== Reason: none detected Timestamp: 1001.589870 RELEASE Activity ID: 0x000000530000000d Trace ID: 0x000001000005d530 Thread: 0x2821 Image UUID: DECA11C7-EB99-3885-947E-42DBD0F9374C Image Path: /usr/libexec/opendirectoryd Offset: 0x21c21 Message: 'request completed, delivered 1 results' ----------------------

Watching Faults [~] root% ostraceutil -watch -faults Process: ================== PID: 557 Image_uuid: 28B91236-BAEA-3979-9DFD-791EBC32E1D6 Image_path: /Demos/Debug/Query Directory.app/Contents/MacOS/Query Directory! Application Breadcrumbs: ================== Timestamp: 996.368669, Messages: Breadcrumb ID = 19072, Name = 'Query directory using NSOperationQueue', Activity ID: 0x0000005300000008 Timestamp: 1001.556305, Breadcrumb ID = 19040, Name = 'Query directory using NSRunLoop', Activity ID: 0x000000530000000d! ================== Activity: Timestamp: 1001.589870 ================== Activity ID: 0x000000530000000d RELEASE Activity Name: sendaction: Timestamp: 1001.556262 Activity ID: 0x000000530000000d Reason: none detected Trace ID: 0x000001000005d530! Messages: Thread: 0x2821 ================== Timestamp: 1001.589870 Image UUID: DECA11C7-EB99-3885-947E-42DBD0F9374C RELEASE Image Path: /usr/libexec/opendirectoryd Activity ID: 0x000000530000000d Trace ID: 0x000001000005d530 Offset: 0x21c21 Thread: 0x2821 Image UUID: DECA11C7-EB99-3885-947E-42DBD0F9374C Message: 'request completed, delivered 1 results' Image Path: /usr/libexec/opendirectoryd ---------------------- Offset: 0x21c21 Message: 'request completed, delivered 1 results' ----------------------

Considerations

Privacy

Privacy Be conscious of privacy when adding trace messages

Privacy Be conscious of privacy when adding trace messages Never trace identifying information about a user or device

Propagation Failure Send mail Program button click XPCService Daemon Time menu select key equivalent XPCService menu select Compose mail menu select Daemon Activity Breadcrumb Trace messages

Propagation Failure Send mail Program button click Daemon Time menu select key equivalent menu select XPCService diagnosticd Send mail button click Compose mail menu select Daemon Compose mail Activity Breadcrumb Trace messages

Support in Diagnostics OS X Yosemite ios 8 Crash Reports Spin Reports Stackshot lldb

Why Use Activity Tracing?

Why Use Activity Tracing? Automatically included in diagnostic reports

Why Use Activity Tracing? Automatically included in diagnostic reports Debugger support

Why Use Activity Tracing? Automatically included in diagnostic reports Debugger support Works on both ios and OS X

Why Use Activity Tracing? Automatically included in diagnostic reports Debugger support Works on both ios and OS X Fast and efficient

Why Use Activity Tracing? Automatically included in diagnostic reports Debugger support Works on both ios and OS X Fast and efficient Integrated with GCD, XPC, NSOperationQueue, and Foundation

Why Use Activity Tracing? Automatically included in diagnostic reports Debugger support Works on both ios and OS X Fast and efficient Integrated with GCD, XPC, NSOperationQueue, and Foundation Captures data that traditional logging mechanisms do not

Why Use Activity Tracing? Automatically included in diagnostic reports Debugger support Works on both ios and OS X Fast and efficient Integrated with GCD, XPC, NSOperationQueue, and Foundation Captures data that traditional logging mechanisms do not Trace messages scoped to the action

More Information Paul Danbold Core OS Technologies Evangelist danbold@apple.com Apple Developer Forums http://devforums.apple.com

Related Sessions Improving Your App with Instruments Marina Tuesday 4:30PM Writing Energy Efficient Code, Part 1 Russian Hill Wednesday 10:15AM Writing Energy Efficient Code, Part 2 Russian Hill Wednesday 11:30AM User Privacy in ios and OS X Nob Hill Thursday 2:00PM Power, Performance and Diagnostics: What s New in GCD and XPC Russian Hill Thursday 2:00PM

Labs Power and Performance Lab Core OS Lab B Wednesday 2:00PM Power and Performance Lab Core OS Lab A Thursday 3:15PM