Instruments 使用指南

Instruments User Guide瀏覽器

page2image920

目錄緩存

INSTRUMENTS用戶指南............................................................................................................................... I INSTRUMENTS用戶指南介紹...................................................................................................................... 2ruby

本文檔組織結構.................................................................................................................... 2 第一章 INSTRUMENTS快速入門 ......................................................................................................... 4服務器

  1. 1.1  啓動INSTRUMENTS ..................................................................................................... 5網絡

  2. 1.2  建立一個跟蹤文檔.................................................................................................... 5數據結構

  3. 1.3  瀏覽跟蹤文檔窗口.................................................................................................... 7

  4. 1.4  示例:快速使用一個跟蹤...................................................................................... 10

  5. 1.5  下一步是什麼?...................................................................................................... 10

第二章 添加和配置INSTRUMENTS工具............................................................................................11

  1. 2.1  使用INSTRUMENT庫................................................................................................. 11

    1. 2.1.1  修改庫試圖模式 ........................................................................................... 12

    2. 2.1.2  查找庫裏面的某個instrument工具 .............................................................. 13

    3. 2.1.3  新建一個自定義的instrument分組 .............................................................. 15

  2. 2.2  添加和刪除INSTRUMENTS工具 ............................................................................... 20

  3. 2.3  配置一個INSTRUMENT工具..................................................................................... 21

第三章 記錄跟蹤數據 ............................................................................................................................ 23

  1. 3.1  選擇須要跟蹤的進程.............................................................................................. 23

    1. 3.1.1  跟蹤全部進程 ............................................................................................... 23

    2. 3.1.2  跟蹤一個已有的進程 ................................................................................... 24

    3. 3.1.3  跟蹤一個新的進程 ....................................................................................... 24

    4. 3.1.4  給每一個Instrument工具指定不一樣的目標 ...................................................... 26

  2. 3.2  收集數據.................................................................................................................. 26

  3. 3.3  使用快速啓動鍵啓動INSTRUMENTS ....................................................................... 27

  4. 3.4  以最小模式運行...................................................................................................... 28

  5. 3.5  從XCODE運行INSTRUMENTS應用 ........................................................................... 29

  6. 3.6  無線鏈接IOS設備 ................................................................................................... 29

第四章 記錄用戶界面軌跡 .................................................................................................................... 32

  1. 4.1  記錄用戶界面軌跡.................................................................................................. 32

  2. 4.2  重複記錄用戶界面軌跡.......................................................................................... 33

  3. 4.3  回放用戶界面軌跡.................................................................................................. 34

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [1]

Instruments User Guide

page3image912

第五章 查看和分析跟蹤數據 ................................................................................................................ 36

  1. 5.1  查看數據的工具...................................................................................................... 36

    1. 5.1.1  跟蹤面板 ....................................................................................................... 36

    2. 5.1.2  詳細面板 ....................................................................................................... 41

    3. 5.1.3  擴展詳細面板 ............................................................................................... 44

    4. 5.1.4  運行瀏覽器 ................................................................................................... 46

  2. 5.2  分析技術.................................................................................................................. 47

    1. 5.2.1  使用Sampler Instrument分析數據................................................................ 47

    2. 5.2.2  使用Allocations Instrument工具分析數據................................................... 49

    3. 5.2.3  查找內存泄露 ............................................................................................... 53

    4. 5.2.4  分析Core Data應用程序............................................................................... 54

第六章 保存和導入跟蹤數據 ................................................................................................................ 55

  1. 6.1  保存跟蹤文檔.......................................................................................................... 55

  2. 6.2  導出跟蹤數據.......................................................................................................... 55

  3. 6.3  從SAMPLE工具中導入數據..................................................................................... 56

  4. 6.4  使用DTRACE數據.................................................................................................... 56

第七章 使用DTRACE建立自定義INSTRUMENTS工具 .................................................................. 57

  1. 7.1  關於自定義INSTRUMENTS工具 ............................................................................... 57

  2. 7.2  建立自定義的INSTRUMENT工具............................................................................. 58

    1. 7.2.1  添加和刪除探針 ........................................................................................... 60

    2. 7.2.2  指定探針的提供者 ....................................................................................... 60

    3. 7.2.3  給探針添加斷言 ........................................................................................... 61

    4. 7.2.4  給探針添加動做 ........................................................................................... 63

    5. 7.2.5  編寫自定義腳本的提示 ............................................................................... 65

    6. 7.2.6  編寫BEGIN和END腳本............................................................................... 65

    7. 7.2.7  從自定義腳本里面訪問內核數據 ............................................................... 66

    8. 7.2.8  變量做用域 ................................................................................................... 67

    9. 7.2.9  查找腳本錯誤 ............................................................................................... 67

  3. 7.3  導出DTRACE腳本.................................................................................................... 68

第八章 內置INSTRUMENTS工具 ....................................................................................................... 69

  1. 8.1  CORE DATA INSTRUMENTS[CORE DATA相關] .......................................................... 69

    1. 8.1.1  Core Data Saves ............................................................................................ 69

    2. 8.1.2  Core Data Fetches ......................................................................................... 70

    3. 8.1.3  Core Data Faults ............................................................................................ 70

    4. 8.1.4  Core Data Cache Misses................................................................................ 71

  2. 8.2  DISPATCH INSTRUMENTS[併發相關]........................................................................ 72

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [2]

Instruments User Guide

page4image920

8.2.1 Dispatch......................................................................................................... 73

  1. 8.3  ENERGY DIAGNOSITICS INSTRUMENTS[電池診斷相關] .......................................... 75

    1. 8.3.1  電量使用(Energy Usage)......................................................................... 76

    2. 8.3.2  CPU 活動(CPU Acitivity)....................................................................... 76

    3. 8.3.3  顯示亮度(Display Brightness)................................................................. 77

    4. 8.3.4  休眠/喚醒(Sleep/Wake) ........................................................................... 77

    5. 8.3.5  藍牙(Bluetooth) ....................................................................................... 77

    6. 8.3.6  無線(WiFi) ............................................................................................... 77

    7. 8.3.7  定位(GPS)................................................................................................ 78

  2. 8.4  FILE SYSTEM INSTRUMENTS[文件系統相關] .......................................................... 78

    1. 8.4.1  I/O 活動(I/O Activity) .................................................................................. 78

    2. 8.4.2  文件鎖(File Locks) ....................................................................................... 81

    3. 8.4.3  文件屬性(File Attributes) ............................................................................. 81

    4. 8.4.4  文件活動(File Activity) ........................................................................... 82

    5. 8.4.5  目錄I/O(Directory I/O) ............................................................................ 83

  3. 8.5  GARBAGE COLLECTION INSTRUMENTS[垃圾回收相關] .......................................... 84

    1. 8.5.1  GC Total ........................................................................................................ 84

    2. 8.5.2  垃圾回收(Garbage Collection)................................................................ 85

  4. 8.6  GRAPHICS INSTRUMENTS[繪圖相關] ....................................................................... 86

    1. 8.6.1  核心動畫(Core Animation) ..................................................................... 86

    2. 8.6.2  OpenGL驅動器(OpenGL Driver)............................................................ 87

    3. 8.6.3  OpenGL ES驅動器(OpenGL ES Driver)................................................. 87

    4. 8.6.4  OpenGL ES分析器(OpenGL ES Analyzer)............................................. 89

  5. 8.7  INPUT/OUTPUT INSTRUMENTS[輸入輸出相關] ....................................................... 90 8.7.1 讀/寫(Reads/Wirtes)................................................................................. 90

  6. 8.8  MASTER TRACKS INSTRUMENTS[界面操做跟蹤相關] ............................................ 91 8.8.1 用戶界面(User Interface) ........................................................................ 91

  7. 8.9  MEMORY INSTRUMENTS[內存相關] ........................................................................ 91

    1. 8.9.1  共享內存(Shared Memory) ..................................................................... 91

    2. 8.9.2  分配內存(Allocations)............................................................................. 92

    3. 8.9.3  內存泄露(Leaks) ..................................................................................... 94

  8. 8.10  SYSTEM INSTRUMENTS[系統相關] .......................................................................... 95

    1. 8.10.1  時間分析器(Time Profiler)...................................................................... 95

    2. 8.10.2  旋轉監控器(Spin Monitor)...................................................................... 96

    3. 8.10.3  取樣(Sampler).......................................................................................... 97

    4. 8.10.4  進程(Process)........................................................................................... 98

    5. 8.10.5  網絡活動監控器(Network Activity Monitor) ......................................... 99

    6. 8.10.6  內存監控器(Memory Monitor) ............................................................... 99

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [3]

Instruments User Guide

page5image920
  1. 8.10.7  硬盤監控器(Disk Monitor) ..................................................................... 99

  2. 8.10.8  CPU監控器(CPU Monitor) ................................................................... 100

  3. 8.10.9  活動監控器(Activity Monitor) .............................................................. 100

8.11 THREADS/LOCKS INSTRUMENTS[線程相關] .......................................................... 100 8.11.1 Java線程(Java Thread)........................................................................... 100

  1. 8.12  UI AUTOMATION[界面自動化相關] ...................................................................... 101

    1. 8.12.1  使用Automation Instrument工具................................................................ 101

    2. 8.12.2  訪問和操做用戶界面元素 ......................................................................... 104

    3. 8.12.3  添加靈活的超時間 ......................................................................................113

    4. 8.12.4  驗證測試結果..............................................................................................114

    5. 8.12.5  輸出測試結果和數據的日子 ......................................................................114

    6. 8.12.6  處理警告......................................................................................................115

    7. 8.12.7  檢測和指定設備的方向 ..............................................................................116

    8. 8.12.8  測試多任務..................................................................................................118

  2. 8.13  USER INTERFACE INSTRUMENTS[用戶界面相關] .................................................. 118

    1. 8.13.1  Cocoa事件(Cocoa Events)......................................................................118

    2. 8.13.2  Carbon事件(Carbon Events)...................................................................119

結束語........................................................................................................................................................... 120 推薦資源....................................................................................................................................................... 121

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [4]

Instruments User Guide

page6image912

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [1]

Instruments User Guide

page7image920

Instruments用戶指南介紹

Instruments 是應用程序用來動態跟蹤和分析 Mac OS X 和 iOS 代碼的實用工具。 這是一個靈活而強大的工具,它讓你能夠跟蹤一個或多個進程,並檢查收集的數據。 這樣,Instruments 能夠幫你更好的理解應用程序和操做系統的行爲。

使用 Instruments 應用,你能夠使用特殊的工具(即 instruments 工具)來跟蹤同 一進程不一樣方面的行爲。你也能夠使用該應用來記錄一系列用戶界面的動做並響應它 們,同時也能夠使用一個或多個 instruments 工具來收集數據。

Instruments 應用包含如下功能:

  •  分析一個或多個進程的行爲

  •  記錄一系列用戶的動做並響應它們,可靠的再現這些事件並收集屢次運行的

    數據

  •  建立你本身自定義的 DTrace instruments 來分析系統和應用程序的行爲

  •  保存用戶界面記錄和instruments的配置爲模板,並從Xcode裏面訪問 使用 Instruments,你能夠:
    追查代碼中難以重現的問題
    對你的程序進行性能分析
    自動化測試你的代碼
    對你程序進行壓力測試
    進行通常的系統級故障診斷
    對你的代碼如何工做有更深刻的瞭解
    Instruments 在 Xcode 3.0 和 Mac OS X 10.5 及其以後可用。
    本文檔描述了 Instruments 的用戶界面,給出了一個如何使用 Instruments 來跟

    蹤進程和查看數據的預留。目的是讓開發人員和系統管理員使用 Instruments 能更好 的瞭解他們程序或系統做爲一個總體的行爲。

    本文檔組織結構 如下章節描述瞭如何使用 Instruments 應用:

    「Instruments快速入門」給出了Instruments的概要預覽,並介紹了主體窗 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [2]

page7image8528

Instruments User Guide

page8image976

口。

  •  「添加和配置Instruments」描述瞭如何添加和配置instruments工具,以及

      在一個或多個進程裏面運行它們收集數據。本章還介紹如何對程序進行選擇
    

    行跟蹤。

  •  「記錄跟蹤數據」描述瞭如何初始化跟蹤並收集跟蹤數據的方法。

  •  「記錄用戶界面軌跡」描述如何記錄和重放一系列有順的用戶操做。

  •  「查看和分析跟蹤數據」描述了用來查看Instruments返回數據的工具。

  •  「保存和導入跟蹤數據」描述瞭如何保存跟蹤文檔和數據,以及如何從其餘

    來源導入數據。

  •  「使用DTrace建立自定義工具」顯示瞭如何建立和配置基於DTrace的自定義

    工具。

  •  「內置的instruments工具」詳細介紹了Instruments內置的工具。

page8image4680 page8image4840 page8image5000 page8image5160 page8image5320 page8image5480 page8image5640

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [3]

Instruments User Guide

page9image920

第一章 Instruments快速入門

Instruments 是一個很強大的工具,你能夠用它來收集關於一個或多個系統進程 的性能和行爲的數據,並跟蹤隨着時間產生的數據。不像其餘大部分性能和調試工具 那樣,Instruments 讓你能夠普遍收集不一樣類型的數據,而且能夠一邊查看它們。這 樣你能夠發現變化趨勢,這在其餘工具裏面是很難作到的。好比,你以前須要採樣程 序的樣本,並分析它們在兩個獨立的執行文件裏面運行的內存行爲。在 Instruments 裏面,你能夠同時完成這些工做。你能夠用這些結果數據來發現你代碼中正在運行部 分的變化趨勢和它們的內存使用狀況。

Instruments 應用使用 instruments 工具來收集關於進程隨時間推移產生的數 據。每一個 instruments 收集和顯示不一樣類型的數據,好比文件訪問、內存使用等等。 Instruments 包括一個標準 instruments 工具庫,你能夠使用它分析你代碼的不少方 面。你能夠配置 instruments 來收集關於同一個或者不一樣系統進程的數據。你能夠使 用自定義的 instruments 工具新建接口來建立新的自定義 instruments 工具,它使用 DTrace 程序來收集你想要的數據。

注意:很多應用程序(iTunes、DVD Player 和 Front Row,還有使用 QuickTime 的應用)爲了保 護敏感數據,不容許使用 DTrace 來收集數據(不管暫時的仍是永久的)。

全部 Instruments 的工做都在一個跟蹤文檔(trace documents)裏面完成。一 個跟蹤文檔收集那些被 instruments 彙集的與該文檔有關的數據。每一個跟蹤文檔一般 包含一個會話的價值數據,這也是做爲一個單一的跟蹤。你能夠保存跟蹤文檔到你已 經收集的跟蹤數據備份裏面,而後能夠在之後再次打開並查看它們。

儘管大部分的 instruments 工具旨在收集數據,可是其中最精密的 instruments 工具能夠幫助自動化收集數據。使用 Instruments User Interface 工具,你能夠在 收集數據的過程當中記錄用戶事件。你能夠使用這些數據來可靠的重複重現這一系列有 序的事件。每次你經過這序列運行,你的跟蹤文檔在其餘 instruments 工具裏面收集 新的跟蹤數據,而且和以前同樣邊收集邊顯示這些數據。這些特性讓你比較跟蹤的數 據來提升你的代碼,並驗證你的改動得到預期的結果。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [4]

Instruments User Guide

page10image920

1.1 啓動Instruments

Instruments 做爲 Xcode 工具安裝的一部分。有幾個啓動 Instruments 的方法:

  •  你能夠在Finder裏面雙擊Instruments應用的圖標來啓動它。Instruments應用

    位於<Xcode>/Applications 目錄下面,<Xcode>表明你 Xcode 安裝的根路徑。

    (Xcode 默認的安裝根路徑時 /Developer 目錄。)

  •  你能夠經過Xcode來啓動Instruments,並把你工程下的可執行文件做爲它的目

    標。在 Xcode 的菜單裏面選擇 Run > Start with Performance Tool 來選擇 Instruments 模板(注:在 Xcode 4.0 以上已經無此方法,你須要經過 Profile 來啓動,更多請 Google 一下)。Instruments 以特定的模板啓動,而且準備好運 行 Xcode 配置的當前可執行文件。

    注意:當你以這種方式來啓動一個 Instruments 模板的時候,在完成跟蹤以後,你必須顯示 的中止你當前的執行文件(不管是從程序裏面仍是從 Instruments 裏面)。這不會關閉 Instruments 的跟蹤文檔。相反,你能夠重啓可執行文件,Instruments 顯示舊的對話框旁 邊顯示新的對話框,就如圖 4-2 顯示那樣。這樣可讓你在 Xcode 裏面修改你的代碼,從新 編譯,運行和比較新的改變產生的跟蹤數據。

  •  你能夠經過雙擊一個Instruments的模板文件或者跟蹤文檔來啓動它。查看」保 存和導入跟蹤數據」部分來掌握如何保存一個 Instruments 的配置文件或者使用 用戶界面記錄做爲一個模板文件。

    1.2 建立一個跟蹤文檔

    當你啓動 Instruments 後,應用會自動爲你建立一個文檔。你一樣能夠經過選擇 File > New 來建立一個新的文檔。

    你每建立一個新的文檔,Instruments 都會提示你選擇一個開始模板。這些模板 定義了一些你將要在你的跟蹤文檔裏面使用的 instruments 工具集。Instruments 提 供了幾種不一樣的模板,在表 1-1 裏面列舉出來,每一個模板都有不一樣的使用目的。若是 你手工的給你的跟蹤文檔添加一個指定的 instruments 工具的話,你能夠使用空白模 板。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [5]

Instruments User Guide

page11image920

Table 1-1 Instruments starting templates

page11image4328 page11image5088 page11image5248 page11image6896 page11image7488

Template

Type

Description

page11image9152 page11image9312 page11image9632 page11image9792 page11image9952 page11image10112 page11image10272 page11image10752 page11image10912 page11image11232 page11image11392

Creates an empty trace document to which you can add your own combination of instruments. To learn how to select and add instruments, see 「Adding and Configuring Instruments.」 For descriptions of the individual

Blank

Mac OS X, iOS, iOS

page11image14808

Simulator,

page11image15416 page11image15576 page11image15736

User

built-in instruments, see 「Built-in Instruments.」

page11image16952 page11image17272 page11image17696 page11image17856 page11image18016 page11image18496 page11image18656 page11image18816

Mac OS X, iOS, iOS

Activity

Monitor

page11image21424 page11image21584

Simulator

Adds the Activity Monitor instrument to your document. Use this template if

page11image23080

you want to correlate the system workload with the virtual memory size.

page11image24288 page11image24712 page11image24872 page11image25032 page11image25352 page11image25512 page11image25832 page11image25992

Mac OS X, iOS, iOS

Adds the Allocations and VM Tracker instruments to your document. Use this template to monitor memory and object-allocation patterns in your program.

Allocations

page11image29024 page11image29184

Simulator

(To use this template, you must launch your process from Instruments.)

page11image30800 page11image31224 page11image31384 page11image31544 page11image32024 page11image32184 page11image32344 page11image32504

iOS, iOS

Adds the Automation instrument to your document. Use this template to

Automation

page11image34768 page11image34928

Simulator

automate user interface tests of your iOS application.

page11image36424 page11image36584 page11image36744 page11image36904 page11image37064 page11image37384 page11image37704 page11image37864 page11image38184

Core

Adds the Core Animation and Sampler instruments to your document. Use this template to measure the number of Core Animation frames per second in a process running on an iOS device, and to see visual hints that help you

iOS

page11image41576

Animation

page11image42184

understand how content is rendered on the screen.

page11image43072 page11image43496 page11image43656 page11image43976 page11image44456 page11image44616 page11image44776

Adds the Core Data Fetches, Core Data Cache Misses, and Core Data Saves instruments to your document. Use this template to monitor data store

Core Data

Mac OS X

page11image47904

interactions in a Core Data application.

page11image48712 page11image49136 page11image49296 page11image49616 page11image49936 page11image50096 page11image50416 page11image50576 page11image50896

CPU

Mac OS X, iOS, iOS

Adds the Sampler and CPU Monitor instruments to your document. Use this template if you want to correlate the overall system workload with the work

page11image53728

Sampler

page11image54336 page11image54496

Simulator

being done specifically by your application.

page11image55752 page11image55912 page11image56072 page11image56392 page11image56552 page11image57032 page11image57192 page11image57352

Adds the Dispatch instrument to your document. Use this template if you want to capture information about GCD queues created by your application

Dispatch

Mac OS X

page11image60400

and about the block objects executing on these queues.

page11image61328 page11image61752 page11image61912 page11image62232 page11image62712 page11image62872 page11image63032

Adds the Energy Diagnostics, CPU Activity, Display Brightness, Sleep/Wake, Bluetooth, WiFi, and GPS instruments to your document. Use this template

page11image64664

Energy

iOS

page11image65880

Diagnostics

page11image66488

to get diagnostic information regarding energy usage in iOS devices.

page11image67456 page11image67616 page11image67776 page11image68096 page11image68256 page11image68576 page11image68896 page11image69056

Adds the File Activity, Reads/Writes, File Attributes, and Directory I/O instruments to your document. Use this template if you want to examine file usage patterns in the system. This combination of instruments monitors open, close, read, and write operations on files and also monitors changes in

Mac OS X,

iOS Simulator

File Activity

page11image74280

the file system itself, including permission and owner changes.

page11image75368 page11image75792 page11image75952 page11image76112 page11image76592 page11image76752 page11image77072

Adds the ObjectGraph, Allocations, and Garbage Collection instruments to your document. Use this template to measure the data reclaimed in the

GC Monitor

Mac OS X

page11image79920

scavenge phase of the garbage collector.

page11image80888 page11image81048 page11image81208 page11image81368 page11image81528 page11image82008 page11image82168 page11image82328

Adds the Allocations and Leaks instruments to your document. Use this template to monitor memory usage in your application and to detect memory leaks. (To use this template, you must launch your process from

page11image84624

Mac OS X, iOS, iOS

Leaks

page11image86104

Simulator

page11image86712

Instruments.)

page11image87480 page11image87904 page11image88224 page11image88384 page11image88704 page11image88864 page11image89184

Adds the Thread States and Dispatch instruments to your document. Use this template to analyze multicore performance, including thread state,

Multicore

Mac OS X

page11image91952

dispatch queues, and block usage.

page11image92880 page11image93304 page11image93624 page11image93784 page11image93944 page11image94536 page11image94696 page11image94856

OpenGL ES

Adds the OpenGL ES Analyzer and OpenGL ES Driver instruments to your document. Use this template to measure OpenGL ES activity and get

iOS

page11image97968

Analysis

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [6]

Instruments User Guide

page12image928
    page12image3680

recommendations for addressing problems.

page12image5968

OpenGL ES

page12image6616

Driver

iOS

page12image8936

Adds the OpenGL ES Driver and Sampler instruments to your document. Use this template to determine how efficiently you’re using OpenGL and the

page12image10688

GPU on iOS devices.

page12image12384

Sudden

page12image12992

Termination

Mac OS X

page12image15056

Adds the Sudden Termination and Activity Monitor instruments to your document. Use this template to analyze sudden termination support. It reports unprotected file-system access the target process should be, but is not, guarding with calls to disable sudden termination. It also provides activity monitoring across all processes, including sudden termination status

page12image18240

for each.

page12image19968

System

page12image20576

Usage

iOS

page12image23232

Adds the I/O Activity instrument to your document. Use this template to record calls to functions that operate on files in a process running on an iOS

page12image25144

device.

Threads

Mac OS X,

iOS Simulator

page12image29768

Adds the Thread States instrument to your document. Use this template to analyze thread state transitions within a process, including running and

page12image31480

terminated threads, thread state, and associated backtraces.

Time Profiler

page12image34688

Mac OS X, iOS, iOS

page12image35720

Simulator

page12image37136

Adds the Time Profiler instrument to your document. Use this template to

page12image38184

perform low-overhead time-based sampling of one or all processes.

UI Recorder

Mac OS X

page12image42328

Adds the User Interface instrument to your document. Use this template as a starting point for recording a series of user interactions with your application. You can use this feature to reproduce a series of events multiple times, gathering a new set of data during each successive run. You can then compare the sets of data knowing that the behavior that generated them was identical. Typically, you would start with this template and add additional

page12image46416

instruments to your document to gather data.

Zombies

Mac OS X,

iOS Simulator

page12image52160 page12image52320

Adds the Allocations instrument to your document. Use this template to measure general memory usage while focusing on the detection of

page12image54096

over-released "zombie" objects.

若是你不想讓 Instruments 在你新建一個文檔的時候詢問你使用那個模板,你可 以在 Instruments 的偏好設置裏面勾選 Suppress template chooser 選項來禁止模板 選擇。關於更多在 Instruments 文檔裏面添加和配置 instrumtns 工具的的信息,參 閱「添加和配置 Instruments」部分。

1.3 瀏覽跟蹤文檔窗口

跟蹤文檔本身包含一個收集和分析數據的空間。你使用這些文檔來組織和配置你 須要用來收集數據的 instruments 工具,而且能夠使用這些文檔來查看你已經收集的 高級和低級的數據。

圖 1-1 顯示了典型的跟蹤文檔。一個跟蹤文檔窗口顯示不少信息,因此須要很好 的組織。正如你使用跟蹤文檔來工做同樣,信息流從左到右。在你的文檔窗口裏面,

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [7]

Instruments User Guide

page13image944

越右邊的窗口數據越詳細。表 1-2 提供了該窗口關鍵區域的介紹。

Figure 1-1 The Instruments window while tracing

表 1-2 列出了圖 1-1 中顯示的關鍵特性,並提供了一個更深刻使用這些特性的討 論。

page13image2848

Table 1-2 Trace document key features

page13image5256 page13image5576 page13image6480

Feature

Description

page13image8128 page13image8288 page13image8448 page13image8768 page13image9248 page13image9568

This pane holds the instruments you want to run. You can drag instruments into this pane or delete them. You can click the inspector button in an instrument to configure its data display and gathering parameters. To learn more about instruments, see「Adding and Configuring

page13image12104

Instruments

page13image12712

pane

page13image13320 page13image13480

Instruments.」

page13image14088 page13image14248 page13image14408 page13image14728 page13image15208 page13image15368

The track pane displays a graphical summary of the data returned by the current instruments. Each instrument has its own 「track,」 which provides a chart of the data collected by that instrument. The information in this pane is read-only. You do use this pane to select specific data points you want to examine more closely, however. The track pane is described in more

Track pane

page13image19576

detail in 「The Track Pane.」

page13image20344 page13image20664 page13image20824 page13image20984 page13image21464 page13image21624

The Detail pane shows the details of the data collected by each instrument. Typically, this pane displays the explicit set of 「events」 that were gathered and used to create the graphical view in the track pane. If the current instrument allows you to customize the way detailed data is displayed, those options are also listed in this pane. For more information about this pane,

Detail pane

page13image25872

see 「The Detail Pane.」

page13image26600 page13image26920 page13image27080 page13image27240 page13image27720 page13image28040

The Extended Detail pane shows even more detailed information about the item currently selected in the Detail pane. Most commonly, this pane displays the complete stack trace, timestamp, and other instrument-specific data gathered for the given event. The Extended

page13image30376

Extended

page13image30984

Detail pane

page13image31632

Detail pane is described in 「The Extended Detail Pane.」

page13image32560 page13image32880 page13image33200 page13image33360 page13image34104

Navigation

The navigation bar shows you where you are and how you got there. It includes two

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [8]

Instruments User Guide

page14image960

bar

page14image3496 page14image3920 page14image4080

menus—the active instrument menu and the detail view menu. You can click entries in the navigation bar to select the active instrument and the level and type of information in the

page14image6256

detail view.

跟蹤文檔的工具欄(toolbar)可讓你增長和控制 instruments 工具,打開視

圖,並配置跟蹤面板。圖 1-2 標示了這些工具欄中不一樣的控件,在表 1-3 裏面提供了

如何使用這些控件的詳細說明。

Figure 1-2 The Instruments toolbar

page14image9104

Table 1-3 Trace document toolbar controls

page14image12024 page14image12344 page14image13248

Control

Description

page14image14896 page14image15056 page14image15216 page14image15536 page14image16016 page14image16176

Pauses the gathering of data during a recording. This button does not actually stop recording, it simply stops Instruments from gathering data while a recording is under way.

page14image18128

Pause/Resume

page14image18736

button

page14image19344

In the track pane, pauses show up as a gap in the trace data.

page14image20472 page14image20632 page14image20952 page14image21432 page14image21592 page14image21752

Record/Stop

page14image22520

button

Starts and stops the recording process. You use this button to begin gathering trace data.

page14image24136

For more information, see 「Collecting Data.」

page14image24944 page14image25104 page14image25264 page14image25584 page14image26064 page14image26384

Loop button

Sets whether the user interface recorder should loop during play back to repeat the recorded steps continuously. Use this to gather multiple runs of a given set of steps. For

page14image28904

information about playing tracks, see 「Replaying a User Interface Track.」

page14image29872 page14image30032 page14image30192 page14image30512 page14image30992 page14image31152

Target menu

Selects the trace target for the document. The trace target is the process (or processes) for which data is gathered. For more information on choosing a trace target,

page14image33752

see 「Choosing Which Process to Trace.」

page14image34560 page14image34720 page14image34880 page14image35200 page14image35680 page14image35840

Selects a time range in the track pane. When set, Instruments displays only data collected within the specified time period. Use the buttons of this control to set the start and end points of the inspection range and to clear the inspection range. For more

page14image38576

Inspection Range

page14image39224

control

page14image39832

information, see 「Viewing Data for a Range of Time.」

page14image40760 page14image41080 page14image41240 page14image41400 page14image41880 page14image42040

Shows the elapsed time of the current trace. If your trace document has multiple data runs associated with it, you can use the arrow controls to choose the run whose data you want to display in the track pane. For information about trace runs, see 「Viewing Trace

Time/Run control

page14image45504 page14image45664

Runs.」

page14image46272 page14image46592 page14image46912 page14image47072 page14image47392 page14image47552

Hides or shows the Instruments pane, Detail pane, and Extended Detail pane. This

View control

page14image49448

control makes it easier to focus on the area of interest.

page14image50616 page14image50776 page14image50936 page14image51416 page14image51576

Hides or shows the instrument library. For information on using the Library window,

Library button

page14image53472

see 「Using the Instrument Library.」

page14image54240 page14image54560 page14image54720 page14image54880 page14image55624 page14image56208

Search field

Filters information in the Detail pane based on a search term that you provide. Use the search field’s menu to select search options. For more information, see「Searching in the

page14image58688 page14image58848

Detail Pane.」

page14image59496

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [9]

Instruments User Guide

page15image920

1.4 示例:快速使用一個跟蹤

爲了記錄跟蹤的數據,你須要指定須要收集數據的目標,而後點擊 Record 按鈕。 大部分 instruments 工具容許你指定一個系統進程做爲目標,而另一些 instruments 工具容許你收集多個進程的信息。

如下步驟描述瞭如何新建一個跟蹤文檔,配置它,並記錄一些數據。Instruments 應用不能在運行以前執行這些步驟。

  1. 啓動Instruments。應用會自動新建一個跟蹤文檔,並提示你選擇一個模板。

  2. 選擇 Activity Monitor 模板,而後單擊選擇按鈕。Instruments 會把 Activity

    Monitor instruments 工具添加到跟蹤文檔裏面。

  3. 在跟蹤文檔的默認目標菜單裏面,選擇 All Process。

  4. 點擊Record按鈕。

  5. 等待幾秒以便Instruments來收集一些數據。

  6. 點擊Stop按鈕。

    恭喜你,你已經使用 Instruments 來收集了一些跟蹤數據。Instruments 在跟蹤

面板(track pane)裏面顯示了幾個和系統加載、虛擬內存大小相關的圖形。在詳細 面板(detail pane)顯示了在數據收集期間運行的進程列表。你能夠在詳細面板裏 面選擇不一樣的視圖模型來查看數據以不一樣方式組織的形式。

1.5 下一步是什麼?

如今已經介紹了和 Instruments 相關的基本概念,你能夠開始更詳細的探索 Instruments 應用了。剩下的章節提供了一個 Instruments 特性的深刻覆蓋,包括如 何添加和配置 instruments 工具,如何記錄用戶界面軌跡,如何分析你收集的數據, 和如何把你收集的數據保存爲之後使用。

記住程序分析是一門藝術也是門科學。在科學方面,也有一些能夠遵循的指南來 發現問題。好比,若是你的應用程序佔用內存過大,那麼有多是應用程序在某些地 方分頁,致使性能表現不佳。藝術方面,由於每一個應用程序如何減小內存佔用的方案 四不一樣的。是否應用程序收集的數據過多?是否它加載太多而又沒有使用的的庫?是 否內存泄露?這些都是你須要問你本身的問題,而 Instruments 只是一個你能夠用來 早點答案的工具。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [10]

Instruments User Guide

page16image920

第二章 添加和配置Instruments工具

Instruments 應用使用 instruments 工具來收集數據,並顯示數據給用戶。儘管 目前理論上沒有限制你在一個文檔裏面包含的 instruments 工具的個數,可是大部分 文檔出於性能緣由通常包含少於 10 個工具。你甚至能夠屢次包含同一個 instument 工具,配置每一個 instrument 工具來收集來自不一樣系統進程的數據。

Instruments 應用內置了普遍的 instruments 工具,能夠使用它們來收集一個或 多個進程的特定數據。大部分這些 instruments 工具都須要少許甚至不須要任何的配 置就能夠使用。你只要簡單的把它們添加到你的跟蹤文檔,便可開始收集跟蹤數據。 然而你也能夠建立自定義的 instruments 工具,它們給你提供了普遍選擇來收集數 據。

本章重點是介紹如何添加已有的 instruments 工具到你的跟蹤文檔裏面,並配置 使用它們。關於如何建立自定義 instruments 工具的更多信息,參閱「使用 DTrace 建立自定義的 Instruments 工具」部分。

2.1 使用Instrument庫

Instrument 庫(如圖 2-1 顯示)顯示了全部 instruments 工具,你能夠把它們添加 到你的跟蹤文檔裏面。該庫包含了全部內置的 instruments 工具和你已經定義好的自 定義 instruments 工具。爲了打開庫的窗口,點擊你的跟蹤文檔下面的 Library 按鈕, 或者選擇 Window > Library。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [11]

Instruments User Guide

page17image936

Figure 2-1 The instrument library

由於庫窗口裏面的 instruments 工具太多,尤爲是在你加入了你的自定義 instruments 工具以後,因此 Instruments 庫窗口提供了幾個組織和查找 instruments 工具的辦法。如下部分就是討論這些方法,並顯示如何使用它們來組織可用的 instruments 工具。

2.1.1 修改庫試圖模式

庫提供了不一樣的視圖模式來幫你組織可用的 instruments 工具。視圖模式容許你 選擇你要在每一個 instrument 工具顯示的信息數量,和你想要 instrument 工具佔據的 空間。Instruments 應用支持如下視圖模式:
View Icons(查看圖標).只顯示每一個 Instrument 工具表明的圖標。

View Icons 和 Labels(查看圖標和標籤).顯示每一個 instrument 工具的圖標和 名稱。

page17image4896

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [12]

Instruments User Guide

page18image920
  •  View Icons 和 Descriptions(查看圖標和描述).顯示每一個 instrument 工具的 圖標、名稱和詳細描述。

  •  View Small Icons 和 Labels(查看小圖標和標籤).顯示每一個 instrument 工具 的名稱和它小版本的圖標。 注意:無論你選擇了那種視圖模式,庫窗口老是在詳細面板部分顯示選擇了的 instrument 工具的詳細信息。

    爲了切換庫的視圖模式,你須要選擇庫窗口底部的 Action Menu 的所需模式。

    除了切換庫的視圖模式,你也能夠經過選擇 Action Menu 裏面的 Show Group Banners 來顯示一組 instruments 工具的父組。庫窗口爲了方便以分組的方式組織 instruments 工具,幫助你縮小查找想要 instrument 工具的範圍。默認狀況下,組 信息沒有顯示在庫窗口的主頁上面。要以分組顯示則須要添加 Show Group Banners 的選項,讓它更容易識別 instruments 工具在某些視圖裏面的通常行爲。

    2.1.2 查找庫裏面的某個instrument工具

    默認狀況下,庫窗口顯示所有可用的 instruments 工具。然而每一個 instrument 工具屬於一個大的分組,它標示了一個 Instrument 工具的目的和它收集數據的類型。 在庫窗口的頂部,你能夠使用組選項控制器來選擇一個或多個分組來限制庫窗口顯示 instruments 工具的數量。當庫裏面包含不少 instruments 工具時,該方法可讓你 更好的找到你想要的 instrument 工具。

    組選項控制器包含兩個不一樣的配置。其中一個配置是庫窗口顯示一個彈出菜單, 你能夠從中選擇單一分組。然而若是你拖動一個分割欄位於彈出菜單和 instrument 面板下面,那麼彈出菜單會變爲一個大綱視圖。在此配置下,你能夠經過按下 Command 鍵和 Shift 鍵來選擇多個你想要的分組。

    圖 2-2 顯示了庫窗口的標準模式和大綱模式。左邊的是標準模式,你能夠經過使 用彈出菜單來選擇一個分組。窗口右邊顯示的是大綱視圖,你能夠選擇多個分組和管 理你自定義分組。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [13]

Instruments User Guide

page19image944

Figure 2-2 Viewing an instrument group

page19image1912

另一個在庫窗口過濾內容的辦法是使用窗口底部的搜索區域。使用搜索,你可 以快速的縮小須要查找的 instrument 工具的範圍,你能夠搜索它的名稱、描述、分 類,結果是一列匹配關鍵字的工具。好比圖 2-3 顯示了匹配 file 關鍵字的 instruments 工具。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [14]

Instruments User Guide

page20image936

Figure 2-3 Searching for an instrument

當庫窗口是彈出框顯示的時候,搜索過濾器的內容基於當前所選擇的 instrument 組。若是是大綱視圖顯示時,不論那個分組被選中,搜索過濾器的內容是基於整個庫 的 instruments。

2.1.3 新建一個自定義的instrument分組

除了能夠使用內置的 instrument 分組,你還能夠建立自定義分組來按照本身的 方式組織 instruments 工具。Instruments 支持兩種自定義分組:靜態分組(static groups)和智能分組(smart groups)。靜態分組就是簡單的靜態。Instruments 不會 改變它們的內容,讓你自由的配置你想要的分組。另外一方面,智能分組會根據指定的 條件動態的改變分組內容。你能夠使用智能分組來顯示一個最近使用的列表,或者 instruments 名稱、描述包含特定關鍵字的分組。

page20image4120

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [15]

Instruments User Guide

page21image936

建立靜態分組
爲了建立一個靜態分組,選擇庫窗口的 action menu 的 New Group,如圖 2-4 所

示。

Figure 2-4 Creating a group

Instruments 建立了一個新的分組並把它添加到庫窗口。爲了查看新的分組和編 輯它的名稱和內容,拖動分割欄到彈出菜單的下面來打開一個頂部面板顯示分組的結 構,如圖 2-5 所示。點擊分組並填寫一個新的名稱。

page21image3464

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [16]

Instruments User Guide

page22image936

Figure 2-5 Editing the name of a group

爲了添加一個 instrument 工具到靜態分組,點擊 Library 來顯示 instruments 工具列表,選擇 instrument 並拖動它到上面的分組面板,如圖 2-6 所示。

page22image2744

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [17]

Instruments User Guide

page23image936

Figure 2-6 Adding an instrument to a custom group

你能夠使用靜態分組來建立層級的 instruments 組織。靜態分組能夠包含其餘靜 態分組,並且它還能夠包含智能分組。然而智能分組不能包含其餘分組。爲了建立分 組的層級結構,你能夠經過如下其中任何一種方式達到:
拖動一個分組到父靜態分組

選擇一個靜態分組,而後選擇 New Group 或 New Smart Group 來建立一個新的項 目做爲所選擇的靜態分組的子分組。
一個包含有其餘分組的分組顯示它本身的 instruments 工具和它全部子分組的

instruments 工具。若是同一個 instrument 出如今多個分組,而且 Show Group Banners 選擇勾選了,那麼同一個 instrument 工具會在每一個包含它的分組下面列出。若是 Show Group Banners 選擇沒被勾選,那麼庫窗口合併相同的 instrument 副本到同一個主 體裏面。

爲了把一個 instrument 從靜態分組刪除,你須要完成如下的事情:

page23image5320

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [18]

Instruments User Guide

page24image944
  1. 選擇一個分組。

  2. 在分組裏面選擇一個你想要刪除的instrument。

  3. 選擇 action menu 的 Remove From Group,或簡單的點擊刪除鍵。

    爲了從庫裏面刪除一個靜態分組,選擇分組,而後選擇 action menu 裏面的 Remove

Group。若是你當前正在使用大綱視圖查看分組,你也能夠選擇對應的分組,而後按 刪除鍵。刪除一個靜態分組會刪除該分組和它所包含的全部嵌套分組。然而該操做並 沒有從庫裏面刪除它包含的 instruments 工具。你能夠在庫分組裏面看到這些 instruments 工具。

建立一個智能分組
爲了建立一個智能分組,選擇在庫窗口的 action menu 裏面的 New Smart Group。

圖 2-7 顯示了編輯規則。標籤域標示了分組在庫窗口裏面出現的名稱。其他的部分是 專門的配置規則,肯定那些 instruments 留在分組裏面。

Figure 2-7 The smart group rule editor

每一個智能分組都必須包含至少一個規則。你能夠跟蹤須要添加額外的規則,使用 規則編輯的控制器和配置分組來應用全部或者部分規則。表 2-1 列舉了你能夠用來匹 配 instuments 的標準。

page24image6208

Table 2-1 Smart group criteria

page24image8320 page24image9544 page24image9968

Criteria

Description

page24image11184 page24image11504 page24image11664 page24image11824 page24image12304 page24image12464

Label

Matches instruments based on their title. This criterion supports the Starts With, Ends

page24image14320

With, and Contains comparison operators.

page24image15248 page24image15408 page24image15568 page24image16048 page24image16208

Matches instruments based on when they were used. You can use this criterion to match

Used Within

page24image18184

only instruments that were used within the last few minutes, hours, days, or weeks.

page24image19312 page24image19472 page24image19792 page24image20536 page24image21120 page24image21280

Search Criteria

Matches instruments whose title, description, category, or keywords include the specified

page24image22776 page24image22936

Matches

string.

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [19]

Instruments User Guide

page25image936

Category

page25image3472 page25image3896 page25image4056

Matches instruments whose library group name matches the specified string. This criterion

page25image5368

does not match against custom groups.

爲了編輯一個已有的智能分組,選擇庫窗口的分組,而後選擇編輯 action menu 的<Group Name>,其中<Group Name>是你對應智能分組的名稱。Instruments 應用會 再次顯示規則編輯器,以便你能夠修改已有的規則。

爲了從庫窗口裏面刪除一個智能分組,選擇分組,而後選擇 action menu 的 Remove Group 選項。若是你當前正使用大綱視圖來查看分組,你也能夠選擇分組而後按刪除 鍵。

2.2 添加和刪除Instruments工具
爲了添加一個 instrument 到跟蹤文檔,從庫窗口裏面拖動到你跟蹤文檔的

Instruments 面板或者跟蹤面板,如圖 2-8 所示。

Figure 2-8 Adding an instrument

你能夠添加任意多的 instruments 工具到你的跟蹤文檔裏面。儘管大部分 instruments 能夠跟蹤系統進程,可是許多隻能跟蹤一個進程。對於這些 instruments 工具,你能夠使用多個 instrument 的實例並把它們賦值給你想要的不一樣進程。經過 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [20]

page25image10416

Instruments User Guide

page26image936

這樣的方法,你能夠同時收集多個程序的相同信息。好比,你可能須要在系統進程的 樣本和它相應的客戶端進程上面這麼作,分析總體的交互模式。

爲了從一個跟蹤文檔刪除一個 instrument 工具,選擇 Instruments 面板中對應 的 instrument 工具而後按刪除鍵。

2.3 配置一個instrument工具

一旦你把 instrument 工具添加到 Instruments 面板,那麼大部分 instruments 工具便可運行。部分 instruments 工具也能夠使用 instrument 檢查器來配置。檢查 器的內容因 instrument 工具不一樣而不一樣。大部分 instruments 工具包含了配置的可 選項來配置跟蹤面板的內容,而少部分包含了額外的控制器來決定 instument 工具自 己收集什麼類型的信息。

爲了打開一個給定的 instrument 工具的檢查器,選擇 instrument 工具,而後作 如下任何一種操做:
點擊instrument工具名稱右邊的檢查器圖標
選項File > Get Info
單擊Command-I

檢查器會出如今 instrument 工具名稱的旁邊,如圖 2-9 所示。爲了隱藏檢查器, 你能夠單擊關閉按鈕。(你用來打開檢查器的命令一樣能夠用來關閉檢查器)

Figure 2-9 Inspector for the File Activity instrument

page26image6544

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [21]

Instruments User Guide

page27image920

在跟蹤面板上面和顯示信息相關的控制器能夠在你給跟蹤記錄數據以前、期間、 以後配置。Instruments 工具自動爲顯示選項收集它須要的數據,不管顯示選項當前 是否顯示在跟蹤面板上面。

在跟蹤面板中的檢查控制器裏面的縮放控制器能夠用來校驗跟蹤數據的放大率。 改變縮放值會改變 instrument 工具在跟蹤面板裏面的高度。View > Decrease Deck Size 和 View > Increase Deck Size 命令作相似的工做來遞減和遞增跟蹤面板裏面 的所選 instrument 工具的放大倍率。

關於 instruments 工具的列表,包含配置選項,參閱「內置 instruments 工具」 部分。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [22]

Instruments User Guide

page28image920

第三章 記錄跟蹤數據

在決定使用什麼 instruments 工具來收集數據以後,下一步就是選擇須要跟蹤的 進程,並開始記錄數據。如何選擇進程依賴於你跟蹤文檔裏面的 instruments 工具。 部分 instruments 工具容許跟蹤全部系統進程,其餘要求你只能爲一個進程記錄數 據。部分 instruments 工具甚至但願你從 Instruments 應用裏面啓動進程以便它們可 以在進程執行以前收集數據。

Instruments 應用提供了幾個初始化跟蹤的可選項,它們可讓你更容易的整合 instruments 工具到你的開發週期裏面。在本章裏面,你將會學到如何爲一個跟蹤文 檔選擇一個進程,並開始使用 Instruments 應用裏面可選的選項來記錄數據。

3.1 選擇須要跟蹤的進程

在你開始收集數據以前,你必須告知 Instruments 應用,它處理你想要的跟蹤。 你能夠經過使用 Instruments 工具欄上面的 Target menu 來指定一個目標進程(或多 個進程)來完成。該菜單提供瞭如下的選項:

  •  All Processes(全部進程).配置你的文檔來跟蹤全部系統進程。

  •  Attach to Process(附加到進程).配置你的文檔來跟蹤一個已經運行的進程。

  •  Choose Target(選擇目標).配置你的文檔來啓動並跟蹤一個進程。(若是進程已

    經運行,Instruments 應用會啓動一個新的副本並跟蹤它)

  •  Instrument Specific(Instrument 指定).選擇該項目來給獨立的 instruments

      工具指定不一樣的跟蹤目標。
      如下各部分描述了每一個選項更詳細的信息。
    

    3.1.1 跟蹤全部進程

    部分 instruments 工具能夠給當前計算機全部運行進程收集數據。你能夠使用這 些功能來配置文檔到整個系統中的事件或活動類型。好比,你能夠使用 Disk Activity 的 instrument 工具來跟蹤全部在特定週期內發生在你計算機上面的可讀和可寫的操 做。爲了跟蹤全部運行的進程,選擇 Target menu 裏面的 All Process 選項。

    注意:All Processes 項目只有當你 Instruments 面板上面的全部 instruments 工具都支持

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [23]

Instruments User Guide

page29image936

的時候纔可用。

3.1.2 跟蹤一個已有的進程

若是你想要跟蹤的進程已經在計算機上面運行了,那麼大部分 instruments 工具

能夠附加到該進程中並開始收集數據。爲了跟蹤一個已有的進程,選擇 Target menu

裏面的 Attach to Process 選項並須要跟蹤的進程,如圖 3-1 所示。

Figure 3-1 Tracing an existing process

3.1.3 跟蹤一個新的進程

若是你想要跟蹤的進程還沒在計算機上面運行,或者你想要控制已經啓動的進程 的條件,選擇 Target menu 上面的 Choose Target 選項。Instruments 應用會記錄最 近啓動過的進程並把它們添加到 Choose Target 的子菜單下面提供快速訪問。若是你 想要啓動的進程沒有在菜單裏面,選擇 Choose Target 來顯示對話框,如圖 3-2 所示:

page29image5208

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [24]

Instruments User Guide

page30image952

Figure 3-2 Choosing a target to launch

page30image1960

Choose Target 對話框讓你選擇要啓動的程序,同時讓你指定如何啓動所選的程 序。表 3-1 列出了對話框中額外的控制並解析如何使用它們。

Table 3-1 Options for launching an executable

page30image5120 page30image5440 page30image6344 page30image6768

Control

Description

page30image7984 page30image8304 page30image8464 page30image8624 page30image9104 page30image9264

Identifies environment variables you want to set before running the process. You might use this option if your program has debugging options that are enabled using an environment

page30image11216

Environment

page30image11824

Variable

page30image12432

variable. Use the plus (+) and minus (-) buttons to add or remove environment variables.

page30image13760 page30image13920 page30image14080 page30image14560 page30image14720

Arguments

Use this field to specify any launch arguments for the application. The arguments you specify are the same ones you would use from the command line when launching the

page30image17320

application there.

page30image18128 page30image18288 page30image18448 page30image18928 page30image19088

Use this menu to specify other runtime options. For example, you can direct the application’s output to the Instruments console or the system console, or discard the output. You can also

Options

page30image21768

specify whether the application is launched in 32-bit or 64-bit mode.

page30image22936 page30image23256 page30image23416 page30image23736 page30image24056

Sets the specified application as the target for all instruments in the trace document. This option is enabled by default. Disabling it lets you assign different targets to different instruments in your trace document. You might use this feature when you have two copies of the same instrument or when you want to trace the behavior of two processes running side

View All

page30image28024

by side.

page30image28672 page30image28832 page30image29152 page30image29896

Traverse

Packages

page30image32056

Displays bundles (such as applications and plug-ins) as a navigable directory structure. Use

page30image33144

this feature if the executable you want to run is inside a bundle.

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [25]

Instruments User Guide

page31image936

3.1.4 給每一個Instrument工具指定不一樣的目標

當你在 Target menu 裏面選擇了 All Processes、Attach to Process 或 Choose Target 選項,Instruments 應用給你選擇的程序的全部 instruments 工具設置默認的 目標。然而不管什麼時候你均可以給每一個 instrument 工具設置不一樣的目標。你可能想要 在同一個時間採樣兩個不一樣的程序,好比使用 instrument 示例。若是你已經有一些 instruments 工具能夠跟蹤全部進程,你可能想讓它們在單進程 instruments 樣本的 時候僅是一個進程。

爲了給每一個 instrument 工具設置基礎的跟蹤目標,你能夠作如下這些:

  1. 在 Target menu 裏面,選擇 Instrument Specific 的選項。

  2. 選擇你的instruments工具裏面的其中一個。

  3. 單擊i圖標來打開instrument工具的檢查器。

  4. 在檢查器的窗口,使用目標區域的彈出菜單來給 instrument 工具設置目標,如

    圖 3-3 所示。

    Figure 3-3 Choosing per-instrument trace targets

  5. 重複第2步到第4步來給每一個instrument工具設置目標。

3.2 收集數據

在你已經選擇了一個要跟蹤的進程以後,你就能夠開始收集數據了。你能夠使用 兩個不一樣的記錄模式之一來收集數據:
Immediatedisplay(當即顯示)。在測量的期間,Instruments應用在跟蹤面板和

page31image7328

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [26]

Instruments User Guide

page32image920

詳細面板當即顯示收集的數據。Instruments 工具欄上面的時間控制器一樣顯示 了你開始記錄數據多長時間了。在這個模式下,Instruments 影響系統性能,因 爲 UI 要持續的更新。這個模式是 Instruments 應用的默認模式。爲了選擇當即 顯示,選擇 File > Record Options > Immediate Display。

Deferred display(延遲顯示)。Instruments 應用延遲顯示收集的數據直到記錄 中止。在測量期間,Instruments 對系統的影響很是小。當你中止記錄的時候, Instruments 應用開始處理並顯示收集的數據。延遲顯示是一個很重要的特性, 當應用程序對性能很敏感的時候。爲了選擇延遲顯示,選擇 File > Record Options > Deferred Display。

  記錄模式隨文檔持久性的。

點擊 Record 按鈕(或選擇 File > Record Trace)來開始收集跟蹤的數據。當你 單擊 Record 時,Instruments 啓動指定的可執行文件或附加到指定進程,並開始收 集數據。爲了中止收集數據,單擊 Stop 按鈕或者選擇 File > Stop Trace。

注意:當你單擊 Record 按鈕時,Instruments 應用有可能顯示一個或多個認證對話框。一些 instruments 工具在開始記錄任何數據以前須要驗證你是不是管理員。Instruments 應用是一個 很強大的工具,可讓你查看正在運行的應用,所以它應該只能被受權的用戶使用。

在記錄期間,若是你想要你的程序繼續運行,可是又不想讓 Instruments 應用收 集數據,單擊你的跟蹤文檔裏面的 Pause 按鈕。Instruments 應用暫時中止收集數據, 可是並無中止當前正在執行的記錄。單擊 Resume 按鈕會讓 Instruments 應用繼續 在當前記錄時間裏面收集數據。因此暫停和繼續會在你的跟蹤面板上面產生一個數據 空白區域。

3.3 使用快速啓動鍵啓動Instruments

快速啓動鍵是全局組合鍵,它可讓你啓動 Instruments 應用程序並使用指定的 文檔模板當即開始收集跟蹤數據。你能夠使用這一特性,若是你當前正在運行一個應 用程序或者查看一些你須要當即捕獲的事情(好比調試或反應遲鈍的行爲)。你能夠 關聯不一樣的組合鍵到不一樣的 instruments 模式上來捕獲不一樣的行爲。

爲了賦值一個快速啓動鍵,打開 Instruments 應用的偏好設置,並導航到快速啓 動面板。該面板顯示了你能夠賦值組合鍵的 instruments 模板的列表。全部的模板

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [27]

Instruments User Guide

page33image920

沒有快捷鍵啓動。要賦值一個的話,找到包含設計模板的行,雙擊它的 Key 列來建立 一個可編輯的單元。當該單元處於編輯模式時,選擇你想要的組合鍵並單擊它們。比 如,爲了賦值一個組合鍵 Command-Option-1,同時按下 Command、Option 和數字 1 的 鍵。

  爲了從模板中刪除一個組合鍵,選擇一行並按刪除鍵。

注意:快速啓動組合鍵起碼要使用至少兩個不一樣的按鍵(Command、Option、Control、Shift)。 你應該避免使用已經被其餘應用程序使用的組合鍵。

  爲了使用快速啓動鍵來給應用程序收集數據,你要作如下步驟:
  1. 把光標放在屬於你要跟蹤的應用程序的窗口上面。

  2. 按下合適的組合鍵來開始跟蹤。

  3. 運行應用程序。

  4. 當你想中止跟蹤的時候,你有兩種選擇:

    把光標放在其中之一的應用程序窗口上面,再次按下組合鍵。
    找到已經打開的跟蹤文檔並按下Stop按鈕。 由於快速啓動鍵要求你把光標移動到其中一個應用程序窗口之上,你能夠使用同

一個快速啓動鍵來給不一樣的應用程序初始化多個跟蹤對話而無需中止任何以前的跟 蹤。你也能夠使用不一樣的組合鍵來給同一個應用程序開始不一樣類型的跟蹤,並讓它們 在同一個時間收集全部的數據。

3.4 以最小模式運行

最小模式(Mini mode)爲你提供了一種在收集數據的時候儘可能減小 Instruments 應用程序可視化尺寸的方法。當你從特定類型的應用程序收集數據的時候,尤爲是面 向圖形的應用程序,在你集中於你應用程序的時候,不少時候你須要收集你的數據。 最小模式隱藏不少打開的跟蹤文檔,在它們的地方顯示不少浮動的窗口,你能夠使用 它們來開始和中止跟蹤。最小模式的一個優勢是 Instruments 應用程序自己須要不多 的繪畫,因此對系統性能影響不多。

圖 3-4 顯示了打開幾個跟蹤文檔的最小化 Instruments 應用窗口。Instruments 應用在最小模式的時候同一時間只顯示三個跟蹤文檔,可是你能夠使用向上和向下箭 頭來找你想要的跟蹤文檔。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [28]

Instruments User Guide

page34image936

Figure 3-4 The Mini Instruments window

單擊跟蹤文檔附近的 Record 按鈕開始爲文檔記錄數據。文檔在跟蹤以前必須配 置好它的 instrument 工具和目標進程。在跟蹤期間,Instruments 應用顯示跟蹤開 始後所用的時間,可是不顯示其餘 instruments 工具、控制器或數據。

爲了啓用最小模式,選擇 View > Mini Instruments。爲了禁用最小模式,單擊 最小模式的 Instruments 窗口的關閉框。你也能夠在標準和最小模式之間切換,經過 選擇 View > Mini Instruments。

3.5 從Xcode運行Instruments應用

在開發期間,你能夠從 Xcode 3 的用戶界面直接加載你的應用程序到 Instruments 應用裏面。這個整合功能可讓你同時快速的加載 Instruments 應用和收集跟蹤數 據,那會啓動你的程序並使用 GDB 調試它。

Xcode 3 裏面的 Run > Run with Performance Tool 子菜單提供了幾種使用可用 性能工具來加載你程序的方法,包括 Instruments。當加載你的應用程序到 Instruments 應用的時候,你能夠經過選擇合適的菜單項目告訴 Xcode 你想要使用的 Instruments 模板。Xcode 加載 Instruments,使用特定的模板新建跟蹤文檔,爲你的 程序設置目標,並告訴 Instruments 來加載你的程序和開始記錄數據。

除了在 Run with Performance Tool 子菜單已有的模板,Xcode 一樣容許你添加 自定義的跟蹤模板到菜單欄。關於更多如何保存一個跟蹤模板並把它添加到菜單的信 息,參閱「保存 Instruments 跟蹤模板」部分。

3.6 無線鏈接iOS設備
爲了使用擴展訪問給 iOS 應用程序收集數據,你能夠在 Instruments 應用和你的

設備之間創建一個無線鏈接。當一個無線設備不切實際或不方便的時候你也能夠使無

page34image8104

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [29]

Instruments User Guide

page35image944

線鏈接。

軟件要求:該特性在 iOS SDK 3.1 及其以後可用。

一般來講,若是你不須要附加一個擴展訪問到你的設備,你須要使用一個有線連 接。無線鏈接比有線鏈接慢,而且要耗更多設備的電來適應來自 Instruments 的繁忙 信息流。結果,使用無線鏈接比有線鏈接耗費更多的電池。
重要:爲了讓 Instruments 應用能夠無線鏈接你的設備,你的 Mac 設備和 iOS 設備都必須擁有開 啓的無線網絡,而且必須鏈接到同一個無線接入點。該接入點必須被配置提供 Bonjour 服務。

爲了創建一個 Instruments 應用和你設備本身的無線鏈接:

  1. 把你的設備經過USB線鏈接到你的電腦。

  2. 在Xcode裏面,把你的應用程序載入你的設備。

  3. 在Instruments裏面,打開或新建一個跟蹤文檔。

  4. 按下 Option 鍵,並選擇 Target menu 裏面的「Enable <device_name> -

    Wireless」選項,如圖 3-5 所示。

    Figure 3-5 Creating a wireless connection between Instruments and an iOS device

page35image6192

一會以後,一個無線的目標出如今 Target menu 上面,名爲「<device_name> Wireless」。若是該無線目標不出現,你的 Wi-Fi 接入點可能沒有被配置來提供 Bonjour 服務。

這個時候你有兩個 Instruments 服務器運行在你的設備上面:一個使用有線鏈接, 另外一個使用無線鏈接。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [30]

Instruments User Guide

page36image920

5. 從你的設備上面斷開USB線,而後鏈接擴展訪問。
如今你能夠使用 Instruments 應用來收集關於你應用程序性能的數據,就如「選 擇要跟蹤的進程」部分介紹的同樣。
無線鏈接即便在 Instruments 退出或鎖定你的設備以後,它依然起做用。在網絡

鏈接條件如以前提到的同樣,你能夠繼續使用無線鏈接。
  爲了中斷無線鏈接:
  1. 在Instruments應用裏面,打開一個跟蹤文檔。

  2. 按下 Option 鍵,而後選擇 Target menu 下面的「Disable <device_name> -

    Wireless」。過了一會以後,該「<device_name> Wireless」的目標變暗,意味 無線鏈接和 Instruments 服務器已經中斷。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [31]

Instruments User Guide

page37image920

第四章 記錄用戶界面軌跡

用戶界面軌跡記錄運行程序的一系列事件和操做。在事件被記錄以後,你能夠多 次回放跟蹤來反覆生成相同的一系列事件。每次你回放用戶界面軌跡時,你能夠在你 的跟蹤文檔裏面使用其餘 instruments 工具來收集數據。這樣作的好處是每次成功運 行後你均可以比較你收集的數據,而且使用它來改變你程序的性能或行爲。

4.1 記錄用戶界面軌跡

你能夠使用 User Interface 的 instrument 工具來記錄用戶界面軌跡。你把該 instrument 工具添加到跟蹤文檔,就像添加其餘 instrument 工具那樣。當你單擊你 文檔裏面的 Record 按鈕時,User Interface instrument 工具開始收集和用戶輸入 相關的事件,例如鼠標和鍵盤事件等。它收集這些事件並在跟蹤面板上面顯示它們給 你查看和檢查。

注意:若是你使用 UI Recorder 模板來新建一個新的跟蹤文檔,Instruments 應用會自動爲你添 加 User Interface 的 instrument 工具到文檔裏面。

在你爲用戶界面軌跡收集了一系列事件後,Record 按鈕的標題會改成 Drive&Record。再次點擊這個按鈕會讓 Instruments 應用來驅動用戶界面,重放你之 前記錄的一系列有序的事件。當作這些的時候,在你跟蹤文檔裏面的其餘 instruments 工具一般會收集數據。在事件流完成後,你應該檢查運行數據。圖 4-1 顯示了一個使用用戶界面軌跡和其餘 instruments 工具的跟蹤文檔。這裏用戶界面軌 跡已經包含了一系列待重放的有序的事件。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [32]

Instruments User Guide

page38image936

Figure 4-1 Recording a user interface track

重要:錄製用戶界面一般使用屏幕閱讀器和其餘爲殘疾人使用的輔助設備的訪問特性。爲了保證 你的計算機支持該特性,打開系統偏好設置的全局訪問(Universal Access)面板,確保「容許 訪問輔助設備(Enable access for assistive devices)」的設置被啓用。

User Interface instruments 工具的詳細面板列出了被記錄的事件,事件的定位, 和被任何按下的鍵。該 instrument 工具一樣能夠捕獲屏幕被用戶操做的部分區域。 縮略圖版本的屏幕截屏被同時顯示在跟蹤面板和詳細面板上面。每一個事件都根據它的 不一樣類型進行着色:

鼠標事件爲藍色 鍵盤事件爲綠色 系統事件爲黃色

4.2 重複記錄用戶界面軌跡

如何在捕獲一系列事件後,你決定沒有得到正確的事件序列,你能夠回頭並從新 捕獲須要的事件直到得到正確的。在你從新捕獲事件以前,你必須告知 Instruments 應用不要使用老的事件序列來驅動用戶界面。User Interface 檢查器的 Action 區域 包含了一個彈出菜單,它可讓你指定讓 instrument 工具如何運行。一般在你捕獲

page38image5504

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [33]

Instruments User Guide

page39image936

事件序列後,Action 設置會被找到設置爲 Drive。爲了從新捕獲,你必須修改設置爲 Capture。完成這些以後,你能夠開始記錄新的事件序列了。由於每次捕獲完成後 Action 設置會切換回 Drive,因此屢次從新捕獲一個事件序列的時候要求你每次記錄 以前把 Action 設置修改成 Capture。

4.3 回放用戶界面軌跡

在你記錄了用戶界面軌跡以後,你能夠回放這些軌跡來從新生成一系列你記錄的 用戶事件。在記錄了一系列事件以後,Instruments 應用會自動把它的 Record 按鈕 的標題改成 Drive&Record。單擊該按鈕來啓動選擇的應用程序,並執行在用戶界面 軌跡裏面每一個記錄的動做。與此同時,Instruments 應用開始在 Instruments 面板上 面其餘活動的 instruments 工具收集相關的數據。

每次成功運行用戶界面軌跡後,Instruments 應用都會在跟蹤面板顯示運行的結 果。爲了修改跟蹤面板中活動的結果,你能夠使用事件控制器的箭頭。單擊這些箭頭 切換於改可用的數據集,會沒每一個能夠的 instruments 工具更新顯示結果。

你也能夠同時查看同一個 instrument 工具全部運行的結果。每一個 instrument 工

具在它的左側都會有一個下拉的三角形。點擊該控件能夠擴展 instrument 工具並對

齊的顯示以前運行的全部結果數據,如圖 4-2 所示。

Figure 4-2 Viewing multiple runs

當收集跟蹤數據時,你能夠點擊文檔工具欄的 Loop 按鈕來讓 Instruments 應用 屢次重複用戶界面軌跡的事件。該按鈕是黏性的,因此單擊它啓動循環而再次單擊則 禁用循環。當循環啓用是,Instruments 應用在連續循環裏面運行一系列有序的事件,

page39image6816

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [34]

Instruments User Guide

page40image920

在循環過程當中每次收集新的跟蹤數據。你能夠使用該特性來重複一系列事件,這些事 件是屢次嘗試後展現的不良行爲。你也能夠使用循環來讓你的應用程序持續工做來對 它進行壓力測試。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [35]

Instruments User Guide

page41image920
       第五章 查看和分析跟蹤數據

由於 Instruments 應用可讓你同時收集多個 instruments 工具的數據,所以你 可能得到的數據量在短期是大量並且壓倒性的。幸運的是,Instruments 提供了很 好的接口來幫助你組織和顯示你收集的數據以便你分析和導航這些數據。弄懂你跟蹤 文檔窗口裏面不一樣區表明的信息對於你查看趨勢和查找潛在問題很是重要。

每一個跟蹤文檔都包含了如下接口元素: 跟蹤面板(Track pane)
詳細面板(Detail pane)
展詳細面板(Extended Detail pane) 運行瀏覽器(Run Browser)

這裏的每一個控件顯示的都是你跟蹤文檔裏面相同的數據。它們只是以不一樣的方式 顯示而已,關於每一個數據點從高級的預覽到詳細的信息等。這樣可讓你以不一樣的方 式來查看你的數據。你能夠經過查看高級的數據來分析變化趨勢,而後查看詳細的數 據來肯定在你的代碼中將要發生的事情和制定關於如何解決潛在問題的思路。

除了用戶界面的可選項,許多 instruments 工具能夠經過配置來以不一樣的方式呈 現數據。你能夠使用這些配置選項在分析過程當中獲取對收集的數據新的透視。

本章中你能夠學習如何使用這些 Instruments 應用給你提供的數據,和如何按照 你的工做流需求修改這些信息數據的呈現方式。

5.1 查看數據的工具
如下部分描述了 Instruments 用戶界面裏面關鍵的元素和如何使用這些元素來查

看跟蹤數據。

5.1.1 跟蹤面板

跟蹤面板是跟蹤文檔窗口裏面最突出的部分。跟蹤面板緊接於 instruments 面板 的右邊。該面板爲每一個 instrument 工具提供了收集數據的一個高級圖形視圖。你可 以使用該面板來覈查你從每一個 instrument 工具收集到的數據,並能夠選擇你想進一 步研究的區域。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [36]

Instruments User Guide

page42image936

跟蹤面板中的天然圖形可讓你更容易的發現你程序的趨勢和潛在的問題。比 如,圖形中一個內存使用的尖峯信息意味着在該地方你的程序分配的內存比平時更 多。該尖峯信息多是正常的,也多是意味你的代碼比你預計在此地方建立了更多 的對象或內存緩衝區。一個 instrument 工具(例如 Spin Monitor instrument)也 一樣能夠指出你程序反應遲鈍的地方。若是 Spin Monitor 的圖形相對是空白的,你 就知道你的程序是正常響應,但若是該圖形不空白,那麼你可能須要覈查爲何會出 現這樣的狀況。

圖 5-1 顯示了一個跟蹤文檔的示例,該示例顯示了全部跟蹤面板的基本特性。你 能夠使用該面板頂部的時間線來選擇覈查的地方。點擊時間線並移動播放頭來定位和 顯示檢查器的旗幟(inspection flags),該旗幟總結了 Instrument 中該定位地方的 信息。你也能夠點擊時間線來彙集數據點在詳細面板上面的信息;參閱「詳細面板」 部分。

Figure 5-1 The track pane

雖然每一個 instrument 工具都不一樣,可是它們絕大部分都會提供修改跟蹤面板數 據顯示的選項。除此以外,部分 instruments 工具還能夠經過配置在它們跟蹤面板裏 面顯示多個數據集。這兩個特性可讓你選擇按照你程序最方便的形式來顯示數據。

  如下部分提供了關於跟蹤面板更多的信息,以及如何配置它們。

查看跟蹤運行
每次你點擊跟蹤文檔裏面的 Record 按鈕,Instruments 應用就會開始收集目標進

程的數據。Instruments 應用建立新的跟蹤運行來保存數據,而不是經過把新的數據 拼接到現有數據的後面。一個跟蹤運行(trace run)構成由你點擊了 Record 按鈕來開 始收集到點擊 Stop 按鈕來中止收集之間的數據。默認狀況下,Instruments 應用只 在跟蹤面板裏面顯示最近的跟蹤運行,可是你也能夠經過如下任何一種方法來查看之

page42image6784

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [37]

Instruments User Guide

page43image936

前的跟蹤運行的數據:
使用工具欄上面的Time/Run控件來選擇你想要查看的跟蹤運行。
點擊instrument工具旁邊的下拉三角形來顯示該instrument工具下面的全部跟

蹤運行的數據。

圖 5-2 一個已經被擴展顯示多個跟蹤運行的 instrument 工具。在該例中,幾個 跟蹤運行都已經收集了數據,這些數據都是由輕微不一樣的事件產生。當你正在嘗試重 現一個並非每次運行均可以出現的問題時,你能夠收集多個跟蹤運行的數據,建立 新的跟蹤運行直到問題出現。然而若是你想要使用相同的事件集來比較多個跟蹤運 行,你須要建立新的用戶界面軌跡和一個想要的進程,該進程在「使用用戶界面軌 跡」部分介紹。

Figure 5-2 Viewing multiple runs of an instrument

當你保存一個跟蹤文檔,Instruments 應用一般會摒棄全部跟蹤運行的數據,除 了你當前選擇的那個。這樣可讓你的跟蹤文檔體積不至於太大。若是你想要保存你 跟蹤文檔裏面全部跟蹤運行的數據,進入 Instruments 應用的偏好設置的 General, 並取消勾選 Save Current Run Only 選項。

顯示同一個 Instrument 工具的多個數據集
一些 instruments 工具是能夠在相應的跟蹤面板顯示多個數據流。你能夠使用

page43image5608

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [38]

Instruments User Guide

page44image936

instrument 檢查器來顯示特定的數據流,如圖 5-3 所示。Statistics to Graph 列 出了全部由 instrument 工具收集的整型的數據值。勾選相應的複選框來添加相應的 統計到跟蹤面板裏面。爲了編輯 Statistics to Graph 裏面統計的列表,選擇 Configure 按鈕。

Figure 5-3 Configuring the statistics to graph

關於每一個 instrument 工具收集的數據的信息,參閱「內置 instruments 工具」。

修改跟蹤顯示的樣式
Instruments 應用提供了幾種在跟蹤面板顯示收集的數據的樣式。大部分

instruments 工具默認選擇一個能夠顯示多個數據類型的樣式。你能夠使用 instrument 的檢查器上面的樣式彈出菜單來修改選擇的樣式。圖 5-4 顯示了幾種樣 式。

page44image4712

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [39]

Instruments User Guide

page45image936

Figure 5-4 Track styles

注意:你所選擇的樣式會影響全部 instrument 工具顯示的數據流。

縮放跟蹤面板
Instruments 應用提供了對跟蹤面板數據在水平方向軸和垂直方向軸的縮小和放

大。
爲了修改水平方向(時間相關)的放大倍數,使用instruments面板下面的滑塊

控制器。
爲了修改垂直方向(幅度和體積相關)的放大倍數,選擇一個instrument工具,

並作下面任一事情:
打開instrument工具的檢查器,使用縮放滑塊。
選擇 View > Increase Deck Size 的菜單選項來遞增縮放因子。 選擇 View > Decrease Deck Size 的菜單選擇來遞減縮放因子。

對於水平方向的縮放,Instruments 應用擴大和合並跟蹤面板周圍的播放頭 (playhead)的位置。若是你在縮放以前把播放頭設置在特定的位置點,你能夠在該位 置點下縮小和放大數據。

page45image5352

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [40]

Instruments User Guide

page46image936

5.1.2 詳細面板

當你在跟蹤面板裏面肯定潛在問題區域後,你能夠使用詳細面板來覈查該區域的 數據。詳細面板顯示了和當前所選擇的 instrument 工具的跟蹤運行相關的數據。 Instruments 應用在詳細面板只顯示一個 instrument 工具相關信息,全部你必須通 過選擇不一樣的 instruments 工具來查看不一樣的詳細信息。

在詳細面板裏面不一樣的 instruments 工具顯示不一樣類型的數據。如 5-5 顯示了和 File Activity instrument 相關的詳細面板,它記錄了和指定文件系統例程相關的 信息。這裏面的詳細面板顯示了文件系統例程調用的方法和函數,使用的文件的描述, 和訪問的文件的路徑。關於每一個 intrument 工具在詳細面板顯示的信息,參閱「內置 instruments 工具」。

Figure 5-5 The Detail pane

你能夠作如下任一事情來打開和關閉詳細面板: 選擇 View > Detail
單擊工具欄上面的 Detail View 按鈕

修改詳細面板的顯示樣式
對於部分 instruments 工具,你能夠在詳細面板裏面使用多於一個格式顯示數據。

page46image5704

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [41]

Instruments User Guide

page47image920

詳細面板支持如下的格式模式:

列表模式(Table mode),顯示一列扁平的彙總樣本數據列表。
大綱模式(Outline mode),顯示樣本的層級結構,一般使用堆棧跟蹤或進程

信息來組織。
圖形模式(Diagram mode),顯示一列獨立的樣本數據。

爲了使用任意的格式來查看 instrument 工具的數據,選擇導航欄最右邊的合適 的模式。instrument 工具是否支持該模式取決於經過該 instrument 工具收集的數據 類型。好比,Sampler instrument 工具就不支持圖形模式,可是 Activity Monitor instrument 工具就支持全部的模式。

可是使用大綱模式顯示數據的時候,你能夠使用相應行的左邊的擴展三角形來向 下擴展相應的層級結構。單擊一個擴展三角形會擴展閱讀或者關閉給定的行。爲了擴 展行和它全部的子行,按下 Option 鍵並同時單擊擴展三角形。

在詳細面板裏面排序 你能夠根據特定列的數據來給詳細面板顯示的信息進行排序。爲了達到這個目

的,單擊相應列的頭。詳細面板裏面的列根據不一樣的 instrument 工具而不一樣。

在詳細面板裏面搜索 你能夠在工具欄上面的搜索域裏面輸入要搜索的字符串來縮小在詳細面板顯示

的信息的範圍。默認狀況下,Instruments 應用在 instrument 工具記錄的全部數據 裏面搜索給定的字符串。然而使用部分 instrument 工具,你甚至能夠提煉搜索的範 圍。好比,使用 Allocations instrument 能夠在 instrument 數據子集裏面搜索給定 的字符串,好比建立內存塊的庫或例程。你甚至能夠在特定的內存地址裏面搜索對象。

範圍過濾器根據不一樣的 Instrument 工具而不一樣。爲了指定特定的目標區域,單 擊搜索域的放大鏡按鈕,並從可選項中選擇範圍。圖 5-6 顯示了 Allocations instrument 的搜索可選項。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [42]

Instruments User Guide

page48image944

Figure 5-6 Filtering the Detail pane

查看時間範圍的數據 雖然在跟蹤面板裏面放大一個特定的事件可讓你查看在具體時間裏面發生了

上面事情,可是你也可能對在某個事件範圍沒收集的數據感興趣。你能夠使用 Inspection Range 控件(如圖 5-7 所示)來聚焦在某個特定的時間範圍收集的數據。

Figure 5-7 Inspection Range control

能夠執行如下的操做來標示一個時間範圍: 1. 設置範圍的開始

A. 在跟蹤面板裏面拖動播放頭到預約開始的時間點

B. 單擊 Inspection Range 控件裏面最左邊的按鈕 2. 設置範圍的結束

C. 拖動跟蹤面板裏面的播放頭到預約的結束時間點
D. 單擊 Inspection Range 控件裏面最右邊的按鈕
Instruments 應用會在跟蹤面板裏面突出你指定範圍的內容。當你設置了一個開

始時間,Instruments 應用會自動的選擇從開始的時間點到當前跟蹤運行的點之間。 若是你開始就設置告終束時間點,Instruments 應用會選擇從跟蹤運行的開始點到你 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [43]

page48image6032 page48image6360

Instruments User Guide

page49image920

指定點之間。
你也能夠在跟蹤面板裏面預設的 insturment 工具上經過按住 Option 鍵並單擊和

拖動覈查範圍來設置它的區域。單擊並拖動鼠標活躍的 instrument 工具(若是它尚 未活躍),並根據 instrument 工具來使用鼠標按下和鼠標放開來設置範圍。

當你設定了一個時間範圍,Instruments 應用會過濾詳細面板的內容,顯示只有 符合指定範圍的收集數據。你能夠快速的縮小由 Instruments 應用收集信息的範圍並 只查看這些在特定週期發生的事件。

爲了清空覈查範圍,單擊 Inspection Range 控件裏面中間的按鈕。

5.1.3 擴展詳細面板

對於部分 instruments 工具,擴展詳細面板顯示了當前在詳細面板裏面所選擇的 項目的額外信息。你能夠執行如下任一操做來打開和關閉擴展詳細面板:
選擇 View > Extended Detail。
單擊工具欄下面的 Extended Detail View 按鈕。

擴展詳細面板一般包括一個被記錄的探頭(probe)或者事件的描述,一個堆棧 跟蹤,和信息被記錄的時間。然而,並非全部的 instruments 工具都會顯示這些信 息。部分 instruments 工具可能並未提供任何擴展詳細信息,而其餘可能在該面板上 面提供其餘信息。關於具體 instrument 工具在該面面板顯示什麼信息,查看「內置 instruments 工具」裏面的 instrument 工具描述。

圖 5-8 顯示了 Allocations instrument 的擴展詳細面板。在該例中,Instrument 應用顯示關於分配內存的類型的信息,包括它的類型,指針信息,和大小。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [44]

Instruments User Guide

page50image952

Figure 5-8 Extended Detail pane

你能夠使用該區域頂部的 Action menu 來配置在堆棧跟蹤裏面顯示的信息。點擊 並按住 Action menu 的圖標將會顯示一個菜單,在該菜單裏面你能夠啓用和禁用相應 表 5-1 中選項。

page50image2744

Table 5-1 Action menu options

page50image5488 page50image5912 page50image6552

Action

Description

page50image8200 page50image8520 page50image8680 page50image8840 page50image9480

Invert Stack

Toggles the order in which calls are listed in the stack trace.

page50image11496 page50image11656 page50image11816 page50image12296

Source Location

Displays the source file that defines each symbol whose source you own.

page50image14472 page50image14632 page50image14792 page50image15432

Library Name

Displays the name of the library containing each symbol.

page50image17328 page50image17488 page50image17648 page50image18128

Frame #

Displays the number associated with each frame in the stack trace.

page50image20264 page50image20584 page50image20744 page50image21224

File Icon

Displays an icon representing the file in which each symbol is defined.

page50image23240 page50image23400 page50image23560 page50image24040 page50image24200

Trace Call Duration

Creates a new Instruments instrument that traces the selected symbol and places

page50image26096

that instrument in the Instruments pane.

page50image27064 page50image27384 page50image27544 page50image27864 page50image28024 page50image28184

Look up API

Opens the Xcode Documentation window and brings up documentation, if available,

page50image29880 page50image30040

Documentation

for the selected symbol.

page50image31376 page50image31536 page50image31696 page50image32440 page50image32600

Copy Selected Frames

Copies the stack trace information for the selected frames to the pasteboard so that

page50image34840

you can paste it into other applications.

如你有一個 Xcode 項目,它的源碼字符被列舉在堆棧跟蹤上面,你能夠單擊一個 字符的名稱來在擴展詳細面板裏面顯示相關的源碼。該源碼被標註爲和性能有關。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [45]

Instruments User Guide

page51image936

堆棧跟蹤能夠經過使用擴展詳細面板下面的滑塊來摺疊顯示。這就是所謂的過濾 的回溯壓縮。該特性的目的是減小堆棧跟蹤的詳細信息,並顯示重要部分。

5.1.4 運行瀏覽器

運行瀏覽器是一個快速查看和管理以前運行的方法。若是你的跟蹤文檔包含數個 運行,你能夠使用該模式在列表的頂部掃描你想要並促進它的運行。你也能夠刪除這 些運行,並給當前視圖的運行添加註釋。

選擇 View > Run Browser 來打開運行瀏覽器。

運行瀏覽器顯示了 Instruments 應用裏面的 Run Browser 視圖。單擊所選視圖的 任何一邊會讓新的視圖滾動進入聚焦。爲了給視圖添加一個註釋,雙擊文本框裏面的 Comment 域來讓他進入編輯狀態。爲了退出一個運行瀏覽器視圖,點擊窗口底部右邊 的返回箭頭按鈕。

Figure 5-9 The Run Browser

page51image4488

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [46]

Instruments User Guide

page52image920

5.2 分析技術

收集和查看跟蹤數據很簡單。可是分析數據並定位潛在的問題就比較困難。後者 的任務把性能調優和調試的藝術變爲現實。意識到在性能工具收集大量數據多是艱 巨的,即便是經驗豐富的開發人員。這有合適的工具(如何知道如何使用它們)讓它 不同凡響。Instruments 應用的 instruments 工具提供了不少組織和過濾跟蹤數據的 不一樣選項。如下部分描述了其中特定的 instruments 工具部分的行爲和選項,和如何 使用這些 instruments 工具來標示你代碼中的問題。

5.2.1 使用Sampler Instrument分析數據

Sampler instrument 工具是一個在運行的程序上面執行統計分析的工具。執行樣 本統計包括在按期中止應用程序並記錄在那個一刻執行的信息。對於每一個線程, Sampler instrument 工具記錄當前在堆棧上面執行的函數和方法,包括擁有函數或 方法的名稱和擁有它的模塊。收集數據以後,它從獨立的樣本里面合併堆棧調用信息 造成主應用程序的調用樹。該樹顯示了全部採樣期間執行路徑和每一個被採樣了多少 次。

樣本統計的優勢是它是一個輕量級的並很方便的方式來發現你應用程序在一個 週期裏面所作的工做。該技術能夠在任何沒有安裝特別的插件代碼的應用程序裏面使 用,並且它一般提供了一個合理準確瞭解你應用程序的運行行爲的圖片。

然而樣本統計的缺點是它沒辦法給你的應用程序所作的事情提供一個 100%的圖 片。由於它只是按期的對調用堆棧作一個快照而已,Sampler instument 工具並無 精確的記錄函數和方法執行的歷史。典型的採樣間隔 1 到 10 毫秒,在這樣本里面有 可能多個函數和方法已經被調用。儘管這些圖片看似不許確,在採集的樣本足夠多的 時候它一樣對大部分程序有效果。隨着時間的推移,越多樣本被採集,採樣間隔越容 易形成的扭曲。所以,統計樣本依然是一個很好的方式來快速收集你應用程序的信息 而無需太多的精力。

注意:Sampler instument 替代了 Sampler 程序,而樣本程序在 Mac OS X v10.5 及其以後不可用。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [47]

Instruments User Guide

page53image920

分析堆棧調用的數據
Sampler instrument 工具的主要目的是顯示程序在該地方的地消耗的時間。它通

過給你顯示什麼函數被調用而且被調用的次數來達到該目的。
Sampler 工具開始的地方是跟蹤面板。默認狀況下,跟蹤面板中的圖形顯示應用

程序全部線程的最大調用堆棧深度(你也能夠改變該圖形來替代顯示 CPU 負載)。因 爲它提供了可視化的方法,跟蹤面板能夠幫你發現代碼中的趨勢。重複模式能夠顯示 正在執行路徑的類似代碼。不一樣部分的圖形也能夠顯示它們當前正在作的事情。經過 單擊感興趣的區域,你能夠開始使用詳細面板分析數據。

你能夠在詳細面板裏面對你的代碼執行更深刻的分析。詳細面板支持列表和大概 的視圖模式。列表模式顯示的是時間順序的樣本。你能夠使用該列表來查看你應用程 序中代碼在給定的地方作了什麼。在大綱模式下,顯示給你看的是有調用堆棧組織的 樣本數據。在該視圖下,你能夠查看每一個線程的執行分支確認那個比其餘擁有更多數 量的樣本。擴展每一個線程可讓你看到的獨立的方法和函數,以及它們收集的樣本數 據。爲了一次性擴展整個層級結構,按下 Option 鍵並同時點擊擴展三角形。

除了在線程的主入口點啓動和查找重要的分支,你也能夠反轉調用樹來在葉子節 點啓動,並查看那個方法和函數被調用次數最多。反轉調用樹能夠幫助你快速的識別 最可能頻繁使用的方法和函數。你能夠在這些葉子節點裏面擴展調用樹來查找誰調用 了該方法或函數,而且調用的次數。當你操做這些的時候,這會幫助顯示給定方法或 函數運行時所花費的毫秒數,以便你能夠關聯樣本的數量和函數使用的實際時間。 注意:儘管 Sampler instrument 報告給定分支所花費的時間,可是這些時間都是近似值。你能夠 使用這些值來肯定程序所在地方花費的時間,可是不能拿這些值來做爲性能指標來衡量你代碼執 行的快慢。

擴展詳細面板給你提供了樣本數據的額外視圖。在列表模式下,該面板顯示了所 選擇的樣本收集的數據,包括樣本被採集的時候全部運行線程的堆棧跟蹤。在大綱模 式下,它顯示了包含所選擇的方法和函數的堆棧跟蹤的深度。

刷選詳細面板的內容
表 5-2 列出了你能夠應用到由 Sampler instrument 收集的樣本上的高級配置選

項。你使用這些選項來集中分析在特定時間發生的事件或涉及你代碼特定部分的事

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [48]

件。

Instruments User Guide

page54image1376

Table 5-2 Configuration options for the Sampler instrument

page54image3704 page54image4024 page54image4928 page54image5352

Configuration section

Description

page54image6712 page54image7032 page54image7192 page54image7352 page54image7832

Choose between displaying all samples that were captured or only those that were captured while the specified thread (or threads) were running. Viewing all samples can give you a complete picture of the behavior of a thread over a period of time, including how much time was spent blocked or waiting for data. Viewing only the running samples provides an approximate picture of how much time was spent actually executing your code. (The actual running time may differ somewhat from the time reported by Instruments so you should use

the reported values only as a rough guide.)

page54image14048

Sample

page54image14656

Perspective

page54image15424 page54image15584 page54image15744 page54image16224 page54image16384

Choose these options to flatten or hide uninteresting parts of the call tree. You can separate out symbols that were gathered from different threads of execution, hide missing symbols or libraries, flatten branches of the call tree that contain recursive calls, and more. These options help you trim irrelevant portions of the call tree and organize the remaining data in

Call Tree

page54image20472

ways that make it easier to spot trends.

page54image21520 page54image21680 page54image21840 page54image22160 page54image22480

Choose the constraints for the data you want to view. You can use these configuration fields to prune the current data set. The Sampler instrument supports constraining data based on the number of samples gathered in a branch or the number of milliseconds spent executing

page54image25216

Call Tree

page54image25864

Constraints

page54image26472

a branch.

page54image27280 page54image27440 page54image27600 page54image28344 page54image28504 page54image28664

Choose the thread you want to analyze. Focusing on a specific thread displays only the samples for that thread, making it easier to see what the thread was doing. Viewing all

Active Thread

page54image31488

threads lets you see all of the work being performed by your application.

Call Tree 的配置選項提供了幾個方法來在不刪除任何樣本數據的前提下刪減調 用樹。當你隱藏或夷平一組符號的時候,Sampler 會在樣本里面一樣隱藏這些調用函 數或方法的符號。這樣可讓你移除任何你不可控的代碼,並集中於你本身的代碼並 查看他執行所消耗的時間。

另外,Call Tree Constraints 實際上從視圖裏面移除了一組樣原本讓你集中於 你的知足特定條件的代碼路徑。例如,你可能使用一個基於時間的約束來集中於運行 時間至少消耗 100 毫秒的代碼路徑。

當你在一個 instrument 工具上面應用這些配置選項的時候,不要忘記你也能夠 約束樣本被收集的時候相應的樣本數據。每一個跟蹤文檔裏面的 Inspection Range 控 制器可讓你查看特定樣本點的數據。該特性和其餘 instrument 工具的其餘配置選 項組合使用。關於更多介紹如何使用 Inspection Range 控制器的信息,參閱「查看 一個時間範圍的數據」部分。

5.2.2 使用Allocations Instrument工具分析數據

Allocations instrument 工具是一個跟蹤全部由應用程序分配的內存的工具。所 以你能夠使用那些信息來識別在你應用程序裏面的內存分配模式,並識別你的應用程 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [49]

Instruments User Guide

page55image920

序內存效率低下的地方。Allocations instrument 提供了和以前應用程序的 ObjectAlloc 同樣甚至更好的數據修整和修剪設施。由於這整合在 Instruments 應用 環境裏面,你也能夠使用該 instrument 工具來關聯你應用程序的內存行爲到其餘類 型的行爲。

由於它跟蹤整個應用程序生命週期的內存分配,你必須從 Instruments 應用裏面 加載你的程序以便 Allocations instrument 工具能夠收集它所須要的數據。在加載 的時候,Allocations instrument 使用系統中已有的掛鉤(hooks)來記錄與你應用程 序中分配和釋放事件相關的信息,不管這些事件起源於系統標準分配入口仍是你本身 自定義的分配庫。隨着數據流的到來,instrument 更新並實時的向你顯示內存是如 何被分配的。

Allocations instrument 能夠工做在使用標準分配函數(如 malloc,calloc 或 free)的應用程序,並且也也能夠工做在使用垃圾回收(garbage collected)的應用 程序上面。後一種狀況,收集器依然調用 free 來釋放 GC-aware(GC 感知)內存。 Allocations instrument 一樣能夠在構建在分配內存之上的例程裏面工做,包括 Core Foundation 和 Cocoa 的內存分配例程。

注意:Allocations instrument 替代了 ObjectAlloc 應用程序,而 ObjectAlloc 應用程序在 Mac OS X v10.5 及其以後不可用。

分析對象分配的數據
Allocation instrument 工具的目的是爲你顯示你的應用程序如何使用內存。內

存是系統重要的資源,你應該明智的使用它。每一個內存分配都包含了直接成本和潛在 的長期成本。直接成本就是它分配內存所消耗的時間,包括建立新的虛擬內存頁面和 把它們映射到物理內存上面。它也有可能包括把陳舊的內存頁面寫入硬盤。而從長遠 來看,保持塊狀的物理內存可能觸發系統額外的頁面,這和其餘頁面操做同樣可能對 系統性能損耗很大。

和全部工具同樣,Allocation 工具開始的地方也是跟蹤面板。默認配置下,跟蹤 面板圖形化你當前應用程序使用內存數量的淨額。使用 instrument 的檢查器,你可 以修改視圖讓它顯示分配的密度,即內存分配發生的地方,或你也可讓它顯示堆棧 的深度。分配密度圖可讓你查看在你程序裏面內存分配發生的頻率。分配密度的尖

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [50]

Instruments User Guide

page56image936

峯意味着潛在的瓶頸,而你能夠經過預先分配塊或減小對其餘塊的依賴來減緩該情 況。

不管你使用檢查器的任何顯示選項,跟蹤面板默認狀況下都會顯示全部類型對象 的分配狀況。爲了集中於特定內存分配的子集,你能夠使用詳細面板來配置你想要在 跟蹤面板圖形顯示的對象。爲了集中於特定的對象類型或塊大小,打開詳細面板並把 它設置爲列表模式(table mode)。在該模式下,詳細面板經過對象類型和大小對內 存分配進行排序。圖形的列包含了複選框可讓你想要選擇圖形化的對象。取消全部 Allocations 的複選框(默認狀況下就是這樣),而後選擇其餘對象類型的複選框來 相應更新跟蹤面板。若是你勾選了多個複選框,Allocations instrument 會爲圖形 生成不一樣顏色的層。

詳細面板(列表模式下)顯示其餘有用的信息來幫你發現潛在的分配問題。列表 中總體分配的淨分配的列顯示了當前活動對象和它有史以來建立數量的直方圖。隨着

淨分配佔總體分配比例縮小,直方圖的條形顏色會跟着改變。藍色的直方圖條形代 表了合理的比例,而當改變爲紅色時意味着比例下降,可能須要覈查一下。

儘管列表模式對於你得到內存分配的全局圖很是有幫助,可是詳細面板集合了三 個視圖模式的優勢。表 5-3 描述了每一個模式的顯示信息和你如何使用這些模式來發現 問題。

Description

Table 5-3 Analyzing data in the Detail pane

page56image6416 page56image7336 page56image8240 page56image8664

Mode

page56image9432 page56image9592 page56image9752 page56image10072 page56image10552 page56image10872

Use this mode to see the summary of net versus overall allocations and to choose which objects you want to graph in the Track pane. Allocations in this mode are grouped by size or object type initially. Clicking the follow link button next to an object type takes you a level deeper by showing you the individual allocation events for that object. Clicking the follow link button again shows you

Table

page56image15160

the history of events that occurred at the same memory address.

page56image16328 page56image16752 page56image17232 page56image17392

Use this mode to see the call trees associated with allocated objects. Clicking the follow link button

Outline

page56image19408

next to an object type focuses on the call trees associated solely with that object type.

page56image20776 page56image20936 page56image21096 page56image21416 page56image22008

Use this mode to see all objects in the order in which they were allocated. Clicking the follow link button next to the object address shows the allocation events associated with that memory

Diagram

page56image25032

address.

Allocations instrument 的擴展詳細面板主要顯示了所選擇的分配事件的堆棧 信息。對於某些分配事件,該面板也顯示了關於事件的描述,包括事件的類型和大小, 和對象的引用數(retain count)。該信息能夠幫你在你的代碼中定位事件。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [51]

Instruments User Guide

page57image936

跟蹤引用數的事件
當你把 Allocations instrument 添加到你的文檔裏面的時候,它的初始化配置

是隻記錄內存的分配和釋放的事件。默認狀況下,它不會記錄引用數的事件,好比 CFRetain 和 CFRelease 的調用。緣由是記錄引用數的事件會給從進程裏面收集數據 增長了額外的開銷,並且在大部狀況是不須要的。然而若是你的代碼發生內存泄露, 你可能想要配置 Allocations instrument 來記錄這些事件做爲你努力追查泄露的一 部分。特別是,你能夠查看任何不匹配的 retain 和 release 的事件來查看一個對象 是否最後引用被刪除了而它仍然保留着。

注意:隨着「Record referenc counts」選項被設置,Allocations instrument 在模板文檔裏面 查找內存泄露地方,這會幫助你追蹤到內存的泄露。

過濾詳細面板的內容
表 5-4 列出了高級的配置選項,你能夠應用它們到 Allocations instrument 記

錄的事件上面。你使用這些選項來集中於分析特定時間發生的事件,或涉及你代碼的 特定部分。全部的這些選項僅當使用大綱或圖形模式查看數據的時候纔可用。在列表 模式下,Allocations instrument 顯示全部分配的歷史記錄。

Table 5-4 Configuration options for the Allocations instrument

page57image7048 page57image7368 page57image8272 page57image8696

Configuration section

Description

page57image10056 page57image10216 page57image10376 page57image10696 page57image11176 page57image11336 page57image11496

Allocation

Choose between displaying all allocation events and those associated with objects that still

page57image13192 page57image13352

Lifespan

exist.

page57image14408 page57image14568 page57image14888 page57image15368 page57image15528

Call Tree

Choose these options to flatten or hide uninteresting parts of the call tree. You can separate out memory blocks based on which thread allocated them, hide allocations made by system libraries, show allocations made from Objective-C calls only , and more. These options help you trim irrelevant portions of the call tree and organize the remaining data in ways that

page57image19616

make it easier to spot trends.

page57image20584 page57image20904 page57image21064 page57image21648 page57image21808

Choose the constraints for the data you want to view. You can use these configuration fields to prune the current data set. The Allocations instrument supports constraining data based

page57image24064

Call Tree

page57image24712

Constraints

page57image25320

on the number of allocations made for a given type or the size (in bytes) of the allocations.

當你應用一個 instrument 的配置選項的時候,不要忘記你也能夠限制樣本數據 基於這些樣本什麼時候被收集。每一個跟蹤文檔裏面的 Inspection Range 控件可讓你查 看特定樣本點的數據。該特性和其餘 instrument 的配置選項組合使用。關於更多如 何使用 Inspection Range 控件的信息,參閱「查看一個時間範圍的數據」部分。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [52]

Instruments User Guide

page58image928

5.2.3 查找內存泄露

Leaks instrument 提供了和使用 leaks 命令行工具同樣的檢測泄露的能力。這個 instrument 分析你程序代碼裏面不在被引用而又正在使用的內存塊。不被引用的內 存塊也被視爲「leaks」,由於它們不能再被你的應用程序釋放,並且一直佔用內存 空間直到程序退出。

爲了你應用程序消除內存泄露是提升你程序可靠性的重要一步。這對於設計爲長 時間運行的程序尤其正確。泄露會提升你程序總的內存佔用空間,這會引起分頁。程 序若是持續的發生內存泄露有可能沒法完成它們的任何操做,由於它們沒法分配必須 的內存。在極端狀況下,程序有可能受損以致於崩潰。

Leaks instrument 記錄你程序中全部發生分配內存的事件,並且週期性的搜索程 序可寫內存,寄存器,和任何活躍內存塊的棧引用。若是在這些地方找到一個沒有對 於引用的內存塊,它會告知緩衝區發生了一個泄露,並在詳細面板裏面顯示相關的信 息。

在詳細面板裏面,你能夠使用列表和大綱模式來查看泄露的內存塊。在列表模式 下,Instruments 應用顯示了泄露塊的徹底列表,它按照大小排序。點擊內存地址旁 邊的如下的 Link 按鈕,顯示在該地址的內存塊分配的歷史,最終分配事件中沒有匹 配的自由事件到顯示最多。選擇其中任何一個分配事件,將會在擴展詳細面板上面顯 示堆棧跟蹤和關於該內存塊的通用信息。在大綱模式下,Leaks instrument 顯示了 由調用樹組織的泄露。你能夠使用該模式來找出在你代碼中特定的分支有多少的內存 泄露。選擇一個分支會在擴展詳細面板裏面顯示該分支的代碼路徑深度。

表 5-5 列出了 Leaks instrument 的配置選項。這些選項的大部分會影響查看泄 露的相關信息,而部分會影響泄露緩衝區是如何被報告的。

Table 5-5 Configuration options for the Leaks instrument

page58image7960 page58image9184

Configuration option

Description

page58image10976 page58image11296 page58image11456 page58image11616 page58image11936 page58image12096 page58image12416

Leaks

Use the available option to enable automatic leak detection and to gather the contents

page58image14152 page58image14312

Configuration

of leaked memory blocks when a leak occurs.

page58image15808 page58image16128 page58image16288 page58image16608

Sampling Options

Use the specified field to set the frequency of automatic leak-detection checks.

page58image18784 page58image18944 page58image19104 page58image19744

Leaks Status

Displays the time until the next automatic leak-detection pass.

page58image21640 page58image21800 page58image21960 page58image22864

Check Manually

Use the provided button to initiate a check for memory leaks.

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [53]

Instruments User Guide

page59image944

Call Tree

page59image3520 page59image3944 page59image4104

Choose these options to flatten or hide uninteresting parts of the call tree. You can hide allocations made by system libraries, show allocations made from Objective-C calls only, and more. These options help you manage the size of the call tree and organize it

page59image6904

in ways that make it easier to spot trends.

關於 leaks 命令行工具的信息,參閱 leaks 主頁。

5.2.4 分析Core Data應用程序

對於使用了 Core Data 來管理它們底層數據模型的應用程序,Instruments 應用 提供了幾個和 Core Data 相關的 instruments 工具來分析潛在的性能問題。這些 instruments 工具可讓你洞察 Core Data 背後發生的事情,幫你識別你程序中沒有 提取或有效保存數據的地方。表 5-6 列出了提供的 instruments 工具和如何使用沒一 個。

Table 5-6 Core Data instrument usage

page59image12536 page59image12856 page59image13760

Instrument

Description

page59image15408 page59image15568 page59image15728 page59image16048 page59image16368 page59image16688

Use this instrument to find a balance between saving data too often and not saving it enough. Saving too often can lead to I/O overhead as your program writes data frequently to the disk. Conversely, saving infrequently can increase the application’s

Core Data Saves

page59image19952

memory overhead and lead to paging.

page59image20760 page59image20920 page59image21240 page59image21560 page59image21880

Use this instrument to optimize the data your application reads from disk. Fetch operations that take a long time might be improved by adding more specific predicates to retrieve only the data needed at that moment. Alternatively, if you notice gaps of inactivity followed by a large number of fetch requests, you might want to use those

Core Data Fetches

page59image25888

gaps to prefetch data that you know will be needed later.

page59image26896 page59image27056 page59image27376 page59image27856 page59image28016

Use this instrument to track the lazy initialization of an NSManagedObject or its to-many relationship. Object faults can be mitigated by prefetching the object itself or the objects

Core Data Faulting

page59image30656

to which it is related.

page59image31424 page59image31584 page59image31904 page59image32648 page59image32808 page59image33232 page59image33392

Core Data Cache

Use this instrument to locate potential performance issues caused by cache misses. Data not found in the caches must be fetched from the disk. Prefetching objects during relatively quiet periods can help mitigate cache misses by ensuring the required objects

page59image36296

Misses

page59image36904

are already in memory.

使用 Core Data 模板新建的跟蹤文檔包含 Core Data Fetches,Core Data Cache Misses,和 Core Data Save instruments 工具.當你分析你的 Core Data 應用程序的 時候推薦使用該模板。

關於更多調節 Core Data 應用程序的信息,參閱 Core Data Programming Guide。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [54]

Instruments User Guide

page60image920
       第六章 保存和導入跟蹤數據

Instruments 提供了幾個保存 instrument 工具和跟蹤數據的方法。對於一個給定 的 Instruments 應用的文檔窗口,你能夠保存你已經記錄的文檔的跟蹤數據,或者你 能夠保存文檔的 instrument 工具的配置信息。保存跟蹤數據可讓你維護一個你應 用程序性能隨着時間變化的記錄。保存文檔配置信息避免你每次運行 Instruments 應用都須要從新建立一個通用的配置。

如下部分解析瞭如何保存一個跟蹤文檔,並導出其餘格式的跟蹤數據給其餘應用 使用。

6.1 保存跟蹤文檔

在開發週期裏面,你可能須要經過在你的程序上面運行一組固定的 instruments 工具來收集多個點的數據。以其每次運行 Instruments 應用的時候重複配置一組相同 的 instruments 工具,你能夠一次性的配置跟蹤文檔,而後保存它的跟蹤模板。選擇 File > Save As Template 來保存你文檔當前使用的 instruments 工具和配置(包括 任何用戶界面軌跡)爲一個模板。

跟蹤模板的文檔和你新建一個文檔時出現的 Instruments 模板不同。你打開跟 蹤模板和打開其餘 instruments 文檔的方式相同,都經過選擇 File > Open。當你打 開一個跟蹤模板時,Instruments 應用會使用該模板配置來建立一個沒有任何數據的 跟蹤文檔。

Xcode 支持使用自定義的跟蹤模板來啓動你的應用程序。爲了把你的跟蹤模板添 加到 Xcode 的 Run 菜單,找到本地系統下/Users/<username>/Library/Application Support/Instruments/Templates 目錄下面的模板。選擇 Run > Start with Performance Tool 菜單來打開它。

6.2 導出跟蹤數據

Instruments 應用可讓你把跟蹤數據導出爲 CSV 的文件格式。該文件格式被大 部分應用程序支持。好比,你可能保存你的跟蹤數據爲該文件格式以便你能夠把它導 入到電子表格的應用程序。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [55]

Instruments User Guide

page61image920

爲了保存你的跟蹤數據爲 CSV 文件,選項 Instruments 應用的 Instrument > Exprot Data for:<Instrument Name>。Instruments 應用將會導出該文檔近期運行 的數據。
注意:並不是全部的 instruments 工具都支持導出爲 CSV 的文件。

6.3 從Sample工具中導入數據

若是你使用 sample 的命令行工具來對你的程序執行進行統計分析。你能夠導入 你的樣本數據並使用 Instruments 應用來查看它們。從 sample 工具中導入數據會新 建一個新的使用 Sampler instrument 的跟蹤文檔,並把數據加載到詳細面板。由於 樣本並無包含時間戳信息,全部你只能在詳細面板裏面使用大綱模式來查看數據。 雖然你能夠應用 Call Tree 配置選項到你的 Sampler instrument 來修整(trim)樣 本數據,可是你不能夠使用 Call Tree Constraints 或 Inspection Range 控件來裁 剪(prune)你的樣本數據。

爲了導入數據,選擇 File > Import Data。Instruments 應用會提示你選擇一個 包含樣本數據的文本文件。而後它會建立一個基於你所選擇的文件的跟蹤文檔。

6.4 使用DTrace數據

你若是你跟蹤一個包含自定義 instruments 工具的文檔,你能夠導出這些 instruments 工具底層的腳本,並使用 dtrace 命令行工具來運行它們。運行腳本後, 你能夠從新導入結果數據進 Instruments 應用裏面。關於更多如何使用這些的信息, 參閱「導出 DTrace 腳本」部分。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [56]

Instruments User Guide

page62image920

第七章 使用DTrace建立自定義instruments工具

Instruments 應用裏面內置的 instruments 工具提供了大量關於程序內部工做的 信息。然而有時候你可能想要定製收集和你代碼更加相關的信息。好比,以其函數每 次調用的時候都收集數據,你可能想要設置條件來決定什麼時候收集數據。另外,你可能 想要在你的代碼裏面進行比內置 instruments 工具更深刻的研究。在這些狀況下, Instruments 應用容許你建立自定義的 instruments 工具。

自定義 instruments 工具使用 DTrace 來實現。DTrace 是最初由 Sun 建立和移植 到 Mac OS X v10.5 的一個動態追蹤工具。因爲 DTrace 深刻操做系統內核,因此你可 以訪問內核自己或你計算機上運行的進程的底層的操做。許多內置的 instruments 工具都是基於 DTrace 的。並且雖然 DTrace 自己就是一個很是強大和複雜的工具, Instruments 應用給你訪問這個強大的 DTrace 工具提供了一個套簡單的接口,而無 需太複雜的操做。

DTrace 並無移植到了 iOS 上面,因此不能在運行在 iOS 設備上面的應用建立自 定義的 instrument 工具。
重要:雖然自定義的 Instrument Builder 簡化了建立 DTrace 探測器的過程,你仍然要比較熟悉 DTrace,並在建立新的 instrument 時瞭解它是如何工做的。許多強大的調試和數據收集動做需 要你本身寫 DTrace 腳本。爲了學習 DTrace 和 D 腳本語言(D scription language),參閱 OpenSolaris website 上面的 Solaris Dynamic Tracing Guide。關於更多 dtrace 命令行工具的 信息,參閱 dtrace 主頁。

注意:部分 Apple 的應用程序(iTunes,DVD Player 和 Front Row)和使用 QuickTime 的應用程 序爲了包含敏感數據不容許使用 DTrace 來收集數據(不管是臨時的仍是持久性的)。因此,你不 應該在執行整個系統的數據收集時運行這些應用程序。

如下部分介紹瞭如何建立一個自定義的 instrument 工具,和如何在 Instruments 應用和 dtrace 命令行工具裏面配合使用這些 instrument 工具。

7.1 關於自定義instruments工具
自定義 instruments 工具使用 DTrace 探針(probe)。探針(probe)是一個就像

是在你的代碼裏面放置了一個傳感器。它響應 DTrace 能夠綁定的位置和事件,好比

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [57]

Instruments User Guide

page63image920

函數的主入口。當函數執行或事件產生的時候,相關的探針會被觸發,且 DTrace 運 行任何和探針相關的動做。大部分 DTrace 的動做只是簡單的收集關於操做系統的數 據和用戶程序此刻的行爲。然而能夠運行一個自定義腳本做爲動做的一部分。腳本可 以讓你使用 DTrace 的特性來微調你收集的數據。

每次遇到探針的時候它都會觸發,可是和探針相關的動做不須要在探針每次觸發 的時候運行。斷言(predicate)是一個可讓你限制探針動做什麼時候運行的條件狀態。 好比,你能夠限制一個探針到指定的進程或用戶,或你能夠在你 instrument 裏面指 定的條件爲真的時候運行動做。默認狀況下,探針不包含任何斷言,意味着探針每次 觸發的時候相關的動做將會運行。然而你能夠添加任何數量的斷言到探針裏面,使用 AND 和 OR 操做符來鏈接它們構成一個複雜的決策樹。

一個 instruments 工具由如下幾部分構成:

  •  一個描述部分,包含了instrument的名稱、類別和描述

  •  一個或多個探針,每一個包含了和它相關的動做和斷言

  •  一個DATA聲明區域,你能夠使用它來聲明全部探針共享的全局變量

  •  一個 BEGIN 腳本,它初始化任何全局變量,並執行任何 instrument 所需的啓動

    任務

  •  一個END腳本,它執行任何最後清理的動做

    全部的 instruments 工具都應該包含起碼一個探針和它相關的動做。相似的,所 有的 instruments 工具都應該包含一個合適的名稱和描述來標識它們。Instruments 應用會在庫窗口裏面顯示你的 instruments 工具的描述。好的描述能夠更容易記住該 instruments 工具是作什麼的和應該如何使用它。

    不須要在全局數據或開始和結束腳本里麪包含探針。這些元素都是用於設計先進 的 instrument 工具,當你相應在多個探針之間共享數據或給你的 instrument 提供一 些有序的初始化配置。建立 DATA,BEGIN 和 END 塊會在「寫自定義腳本的建議」部分 介紹。

    7.2 建立自定義的Instrument工具
    爲了建立一個自定義的 DTrace 的 instrument 工具,選擇 Instrument > Build New

    Instrument(你也能夠選擇你跟蹤文檔下面的 Action menu 裏面 Add Instrument >

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [58]

Instruments User Guide

page64image936

DTrace Instrument 來執行相同的動做)。該命令顯示了 instrument 配置表,如圖 7-1 所示。你能夠使用該表來指定你的 instrument 工具的信息,包括任何探針和自定義 腳本。

Figure 7-1 The instrument configuration sheet

你最少應該爲你建立的每一個 instrument 提供如下信息:

  •  名稱(Name),在庫裏面你的自定義instrument工具的相關名稱。

  •  類別(Category),是你的 Instrument 工具出如今庫裏面的類別。你能夠指定一

    個已有的類別,好比內存(Memory),或者建立一個你本身的類別。

  •  描述(Descritpion),該Instrument工具的描述,用於庫窗口裏面和instrument

    的幫助標籤裏面。

  •  探針提供者(Probe provider),包括探針的類別和它什麼時候觸發的詳細信息。一般

      包含了探針應用的指定方法或函數。關於更多信息,參閱「指定探針提供者」。
    
  •  探針動做(Probeaction),當你探針觸發時須要記錄的數據或者須要執行的腳本。

      參閱「添加動做到探針」部分。
    

    一個 instrument 工具應該包含起碼一個探針,且能夠包含多個。探針的定義包 含了提供者信息,斷言信息,和動做。全部的探針都必須指定起碼一個提供者的信息, 而且幾乎全部的探針都定義某種有序動做。探針定義的斷言是可選的,可是它對於讓

page64image6312

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [59]

Instruments User Guide

page65image928

你的 instrument 工具集中於正確的數據很是有幫助。 7.2.1 添加和刪除探針

每一個新的 instrument 工具都伴隨一個你配置的探針。你能夠在 instrument 配置 表的底部點擊(+)按鈕來添加多個探針。

爲了從你的 instrument 工具裏面刪除一個探針,你能夠單擊選擇探針並按下(-) 按鈕。

當添加探針的時候,最好給探針提供一個描述的名稱。默認狀況下,Instruments 應用經過使用像「Probe 1」和「Probe 2」這樣的名稱來枚舉探針。

7.2.2 指定探針的提供者

爲了指定一個觸發探針的位置或事件,你必須關聯一個探針到它的合理的提供 者。提供者(Providers)是內核模塊,它是 DTrace 的代理,提供了建立探針所須要的 instrument 信息。你不須要知道提供者是如何建立 instrument 的,你只須要知道每 個提供者的基本能力。表 7-1 列出了在 Instruments 應用建立自定義 instrument 工 具所支持的提供者。提供者的列列出在 instrument 配置表所示的名稱,而 DTrace 提供者列列出在相應的 DTrace 腳本里面使用的提供者的名稱。

Table 7-1 DTrace providers

page65image7880 page65image8200 page65image8520 page65image9744 page65image10168

Provider

DTrace provider

Description

page65image12408 page65image12568 page65image12728 page65image12888 page65image13208 page65image13368 page65image13848 page65image14008 page65image14168

The probe fires on entry (or return) of the specified function in your code. You must provide the function name and the name of the library that

User Process

pid

page65image17336

contains it.

page65image17984 page65image18144 page65image18304 page65image18624 page65image18784 page65image19264 page65image19424 page65image19744

The probe fires on entry (or return) of the specified Objective-C method.

Objective-C

objc

page65image22008

You must provide the method name and the class to which it belongs.

page65image23256 page65image23416 page65image23576 page65image23736 page65image23896 page65image24376 page65image24536 page65image24696

The probe fires on entry (or return) of the specified system library

System Call

syscall

page65image27160

function.

page65image27928 page65image28088 page65image28408 page65image28568 page65image28728 page65image29048 page65image29208 page65image29368

The probe fires when DTrace itself enters a BEGIN, END, or ERROR

DTrace

DTrace

page65image31792

block.

page65image32560 page65image32720 page65image32880 page65image33040 page65image33200 page65image33680 page65image33840 page65image34160 page65image34320

Kernel Function

fbt

page65image35576

Boundaries

The probe fires on entry (or return) of the specified kernel function in your code. You must provide the kernel function name and the name of

page65image37736

the library that contains it.

page65image38664 page65image38824 page65image38984 page65image39144 page65image39304 page65image39944 page65image40264

Mach

mach_trap

The probe fires on entry (or return) of the specified Mach library function.

page65image42728 page65image42888 page65image43208 page65image43368 page65image43528 page65image44112 page65image44272 page65image44432

The probe fires regularly at the specified time interval on each core of the machine. Profile probes can fire with a granularity that ranges from

Profile

profile

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [60]

Instruments User Guide

page66image928
    page66image3656

microseconds to days.

Tick

tick

page66image8208

The probe fires at periodic intervals on one core of the machine. Tick probes can fire with a granularity that ranges from microseconds to days. You might use this provider to perform periodic tasks that are not

page66image10624

required to be on a particular core.

I/O

io

page66image14752

The probe fires at the start of the specified kernel routine. For a list of functions monitored by this probe, use the dtrace ‐l command from Terminal to get a list of probe points. You can then search this list for

page66image17328

probes monitored by the io module.

Kernel Process

proc

page66image21128

The probe fires on the initiation of one of several kernel-level routines.

page66image22336

For a list of functions monitored by this probe, use the dtrace ‐lcommand from Terminal to get a list of probe points. You can then

page66image24008

search this list for functions monitored by the proc module.

page66image25624

User-Level

page66image26232

Synchronization

plockstat

page66image29224

The probe fires at one of several synchronization points. You can use

page66image30432

this provider to monitor mutex and read-write lock events.

Core Data

CoreData

page66image34496

The probe fires at one of several Core Data–specific events. For a list of methods monitored by this probe, use the dtrace ‐l command from Terminal to get a list of probe points. You can then search this list for

page66image36872

methods monitored by the CoreData module.

Ruby

ruby

page66image41384

The probe fires at one of several Ruby-specific events.

在你爲你的探針選定了提供者後,你須要指定探針旁邊的相關信息。對於函數級 別的探針,它可能須要輸入函數或方法的名稱和代碼模塊或包含它的類。部分提供者 可能只要簡單的從彈出菜單裏面選擇包含相應的事件便可。

你配置完一個探針後,你能夠繼續增長額外的斷言(來肯定它什麼時候觸發)或你可 以繼續爲探針定義動做。

7.2.3 給探針添加斷言

斷言可讓你控制一個探針的動做什麼時候被 Instruments 應用執行。你能夠使用它 們來防止 Instruments 應用收集那些你不關心或有誤的數據。好比,若是你的代碼只 當堆棧達到必定的深度才表現出不尋常的行爲,你能夠使用一個斷言來指定目標堆棧 的最低深度。每次探針觸發的時候,Instruments 應用都會斷定相關的斷言。僅當它 們斷定爲真的時候,DTrace 纔會執行相關的動做。

你能夠經過點擊探針行最後面的(+)的按鈕來添加一個斷言到探針。Instruments 應用會添加一個斷言到探針裏面,如圖 7-2 所示。你隨後能夠經過使用探針或斷言後 面(+)按鈕來添加一個新的斷言。你能夠經過單擊斷言旁邊的(-)按鈕來刪除一個斷 言。爲了從新排列斷言,能夠點擊斷言的右邊側的空白地方並把它拖拉到新的位置。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [61]

Instruments User Guide

page67image944

Figure 7-2 Adding a predicate

Instruments 應用按照斷言從上到下的順序來判斷。你能夠使用 AND 和 OR 操做符 來鏈接斷言,可是不能把它們分組來建立嵌套的條件塊。相反,你必須謹慎的給你的 斷言排序並保證全部的斷言條件都被檢查。

斷言行的第一個彈出框讓那你選擇做爲檢測條件一部分的數據。表 7-2 列出了由 DTrace 定義的標準的變量,你能夠在你的斷言或腳本里面使用它們。該變量列列出 了它在 instrument 配置面板出現的名稱,而 DTrace 變量列列出了變量在相應 DTrace 腳本使用的事件名稱。除了標準變量,你能夠測試自定義變量和你腳本里面在斷言處 指定自定義變量類型的常量。

page67image3768

Table 7-2 DTrace variables

page67image7168 page67image7488 page67image7648 page67image9048 page67image9472 page67image9632

Variable

DTrace variable

Description

page67image11336 page67image11496 page67image11656 page67image11816 page67image11976 page67image12296 page67image12456 page67image12936 page67image13096 page67image13416

The value of the current thread’s program counter just before

Caller

caller

page67image15600

entering the probe. This variable contains an integer value.

page67image16528 page67image16688 page67image16848 page67image17168 page67image17328 page67image17648 page67image17968 page67image18128

The identifier for the physical chip executing the probe. This is a 0-based integer indicating the index of the current core. For

Chip

chip

page67image21056

example, a four core machine has cores 0 through 3.

page67image22024 page67image22184 page67image22344 page67image22928 page67image23088 page67image23408 page67image23568 page67image23728

The identifier for the CPU executing the probe. This is a 0-based integer indicating the index of the current core. For

CPU

cpu

page67image26616

example, a four core machine has cores 0 through 3.

page67image27584 page67image27744 page67image27904 page67image28488 page67image28648 page67image28968 page67image29128 page67image29288 page67image29448

Current Working

The current working directory of the current process. This

page67image31184 page67image31344

Directory

cwd

variable contains a string value.

page67image33008 page67image33168 page67image33328 page67image33912 page67image34072 page67image34392 page67image34552 page67image34712

The error value returned by the last system call made on the

Last Error #

errno

page67image37216

current thread. This variable contains an integer value.

page67image38104 page67image38264 page67image38424 page67image38744 page67image38904 page67image39384 page67image39544 page67image39704

The name that was passed to exec to execute the current

Executable

execname

page67image42088

process. This variable contains a string value.

page67image43096 page67image43256 page67image43416 page67image43576 page67image43736 page67image44320 page67image44480 page67image44640

The real user ID of the current process. This variable contains

User ID

uid

page67image47064

an integer value.

page67image47912 page67image48072 page67image48232 page67image48392 page67image48552 page67image49136 page67image49296 page67image49456

Group ID

gid

The real group ID of the current process. This variable

page67image51840

contains an integer value.

page67image52728 page67image52888 page67image53048 page67image53208 page67image53368 page67image53952 page67image54112 page67image54272

The process ID of the current process. This variable contains

Process ID

pid

page67image56656

an integer value.

page67image57504 page67image57664 page67image57824 page67image57984 page67image58144 page67image58728 page67image58888 page67image59048

The process ID of the parent process. This variable contains

Parent ID

ppid

page67image61432

an integer value.

page67image62280 page67image62440 page67image62600 page67image62760 page67image62920 page67image63664 page67image63824 page67image64576

The thread ID of the current thread. This is the same value

Thread ID

tid

page67image66880

returned by the pthread_self function.

page67image67648

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [62]

Instruments User Guide

page68image920
page68image2392

Interrupt Priority

page68image3200

Level

ipl

page68image5504

The interrupt priority level on the current CPU at the time the

probe fired. This variable contains an unsigned integer value.

Function

probefunc

page68image11688

The function name part of the probe’s description. This

page68image12616

variable contains a string value.

Module

probemod

page68image16760

The module name part of the probe’s description. This

page68image17848

variable contains a string value.

Name

probename

page68image21992

The name portion of the probe’s description. This variable

page68image23080

contains a string value.

Provider

probeprov

page68image27184

The provider name part of the probe’s description. This

page68image28272

variable contains a string value.

Root Directory

root

page68image32800

The root directory of the process. This variable contains a

page68image33928

string value.

Stack Depth

stackdepth

The stack frame depth of the current thread at the time the

thread fired. This variable contains an unsigned integer value.

page68image41336

Relative

page68image41944

Timestamp

timestamp

page68image43928

The current value of the system’s timestamp counter, measured in nanoseconds. Because this counter increments from an arbitrary point in the past, you should use it to calculate only relative time differences. This variable contains

page68image46368

an unsigned 64-bit integer value.

Virtual Timestamp

vtimestamp

page68image50552

The amount of time the current thread has been running, measured in nanoseconds. This value does not include time spent in DTrace predicates and actions. This variable

page68image52568

contains an unsigned 64-bit integer value.

Timestamp

walltimestamp/1000
page68image56912

The current number of nanoseconds that have elapsed since 00:00 Universal coordinated Time, January 1, 1970. This

page68image58264

variable contains an unsigned 64-bit integer value.

arg0througharg9

arg0 through arg9

page68image62568

The first 10 arguments to the probe represented as raw 64-bit integers. If fewer than ten arguments were passed to the

page68image64240

probe, the remaining variables contain the value 0.

Custom

page68image67608

The name of your

page68image68336

variable

page68image69680 page68image70272

Use this option to specify a variable or constant from one of

page68image71320

your scripts.

  除了條件變量,你還必須指定比較運算符和目標的值。

7.2.4 給探針添加動做

當 instrument 工具定義的一個探針點被激活時,而且探針的斷言條件判斷爲真, DTrace 將會運行探針相關的動做。你使用探針的動做來收集數據或執行額外的處理。 好比,若是你的探針監視一個特定的函數或方法,你可讓它方法函數的 caller 和 任何 Instrument 堆棧跟蹤信息。若是你想要一個稍微更高級的動做,你能夠使用腳 本變量來跟蹤函數被調用的次數,並報告該信息。並且若是你想要更加高級的動做, 你能夠使用內核級別的 DTrace 函數來編寫腳原本肯定你函數使用的一個鎖的狀態。 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [63]

Instruments User Guide

page69image936

在後面那種狀況,你的腳本代碼一樣可能返回鎖當前的擁有者(若是有的話)來幫助 你肯定代碼中不一樣線程間的交互。

圖 7-3 顯示了 instrument 配置表的部份內容,在這裏你能夠指定你探針的動做。 該腳本只是簡單的包含了一個文本區域來爲你腳本代碼肯定類型(Instruments 應用 在把它傳遞給 DTrace 以前不會驗證你的代碼,因此你要仔細的檢查你的代碼)。底下 部分包含了你想要在 instruments 工具裏面 DTrace 返回的數據的控件。你能夠使用 彈出菜單來配置一個你想要返回的內置的 DTrace 變量。你也能夠在彈出菜單裏面選 擇自定義類型並返回一個你本身的腳本變量。

Figure 7-3 Configuring a probe’s action

當你配置你的 instrument 工具返回一個自定義變量時,Instruments 應用會要你 提供如下的信息:
包含數據的腳本變量
在你的instrument工具接口上面給變量賦值的名稱
變量的類型

你的探針返回給 Instruments 應用的任何數據都會被收集並顯示在 instruments 工具的詳細面板上面。詳細面板顯示全部的數據變量,不管它的類型是什麼。一旦堆 棧信息對一個特定的探針可用,Instruments 應用會在你的 instruments 工具的擴展 詳細面板上面顯示該信息。此外,Instruments 應用會自動的查找由你 Instrument 工具返回的整型數據並把這些類型添加到顯示在跟蹤面板上面的分析列表裏面。

由於 DTrace 腳本運行在內核空間,而 Instruments 應用運行在用戶空間,若是 你想要返回一個自定義指針類型的腳本變量的值給 Instruments 應用,你必須建立一 個緩衝區來存儲這些變量的數據。建立緩衝區最簡單的方式是使用 DTrace 裏面的 copyin 或 copyinstr 子程序。copyinstr 子程序須要一個 C 字符串指針的參數,並返 回一個字符串內容形式,你能夠把該字符串返回給 Instruments 應用。相似的,copyin

page69image7496

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [64]

Instruments User Guide

page70image928

子程序須要一個指針和指針大小的參數,並返回一個緩衝區的數據,你能夠在之後使 用 stringof 關鍵字格式來把它轉換爲一個字符串。這兩個子程序都是 DTrace 環境的 一部分,而且能夠被使用在你探針動做定義代碼裏面的任何部分。好比,爲了從 C 風格的指針返回一個字符串,你須要簡單的使用 copyinstr 子程序來封裝該變量,如 圖 7-4 所示。

Figure 7-4 Returning a string pointer

重要:Instruments 應用會自動使用 copyinstr 來封裝內置的變量(好比 arg0 到 arg9 的函數參 數),前提是該變量類型被設置爲 String。而後,它不會對你腳本的自定義變量作一樣的操做。 你負責確保你自定義變量裏面的數據匹配該變量指定的類型。

關於 Instruments 應用支持的內置變量,參閱表 7-2。關於腳本和腳本變量的更 多信息,參閱「編寫自定義腳本的提示」部分。關於 DTrace 子程序的更多信息,包 括 copyin 和 copyinstr 子程序,參閱 OpenSolaris 上的 Solaris Dynamic Tracing Guide。

7.2.5 編寫自定義腳本的提示

你能夠使用 D 腳本語言來編寫 DTrace 腳本,它們的語法是 C 編程語言的一個大 子集。D 語言結合了 C 語言編程結構的特殊函數和變量來幫助你在程序裏面跟蹤信息。

如下部分描述了幾個在你自定義 instruments 工具裏面使用腳本的通用形式。然 而它們不提供對 D 語言的全面預留,也不提供編寫 DTrace 腳本的過程。關於腳本和 D 語言的信息,參閱 OpenSolaris website 上面的 Solaris Dynamic Tracing Guide。

7.2.6 編寫BEGIN和END腳本

若是你想在你的動做觸發的時候不僅是返回 DTrace 內置變量信息給 Instruments 應用,那麼你須要編寫自定義腳本。腳本能夠在內核級別直接和 DTrace 交互,提供訪問關於內核和活躍進程的底層信息。大部分 instruments 工具使用腳本 來收集 DTrace 不容易提供的信息。你也能夠使用腳本在數據返回給 Instruments 應 用時操縱原始數據。好比,若是你想要更容易的和 instruments 跟蹤面板的其餘值比 較,你能夠使用腳原本格式化一個特定範圍的數據值。 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [65]

page70image9256

Instruments User Guide

page71image1096

在 Instruments 應用裏面,自定義 instrument 工具的配置表提供了幾個你能夠 編寫 DTrace 腳本的區域:

  •  DATA部分包含了任何你想要在instrument工具裏面使用的全局變量的定義。

  •  BEGIN部分包含了你的instrument工具裏面的代碼的初始化。

  •  每一個探針包含了它的動做的腳本代碼。

  •  END部分包含了清理你instrument工具的任何代碼。

    全部腳本區域都是可選的。你不須要必定包含腳本初始化代碼或清理 instrument 工具的代碼(若是你的 instrument 工具不須要的話)。然而若是你的 instrument 工 具在它的 DATA 部分定義了全局變量,推薦你提供初始化代碼來設置這些全局變量爲 已知的值。D 語言不容許你在全局變量聲明的時候內聯的指定值,全部你必須在 BEGIN 部分給它們賦值。好比,DATA 部分可能簡單的由一個變量聲明構成,以下:

    相應的 BEGIN 部分可能包含如下對變量初始化的代碼:

    若是你相應的探針動做改變了 myVariable 的值,你可能須要在你探針的 END 部 分格式化並打印出變量的最終值。

    你的大部分腳本均可能和單獨的探針相關聯。每一個探針包含一個和它動做相關的 腳本。當是時候執行探針動做的時候,DTrace 首先會運行你的代碼,而後返回任何 要求的數據給 Instruments 應用。由於傳遞數據回 Instruments 應用包括從內核空間 拷貝數據到 Instruments 應用的程序空間,所以你應該老是經過在「Record the following data:」部分的 instruments 配置表裏面配置合適的實體來傳遞數據返回 給 Instruments 應用。在你的腳本代碼裏面人工返回的變量有可能沒法正確的返回給 Instruments 應用。

    7.2.7 從自定義腳本里面訪問內核數據

    由於 DTrace 腳本在系統的內核執行,它們能夠訪問內核的字符。若是你想要在 自定義 instruments 工具裏面查看內核全局變量和數據結構,你能夠在你的 DTrace 腳本里面執行這些操做。爲了訪問內核變量,你必須在變量名稱前面加一個反引符 (~)。反引號字符告知 DTrace 查找當前腳本以外的指定變量。

page71image8344 page71image8504 page71image8928 page71image9088 page71image9248 page71image9408 page71image9568 page71image9992
int myVariable;
page71image10640 page71image10800 page71image10960 page71image11120 page71image11544 page71image11704 page71image11864 page71image12024 page71image12184 page71image12344
myVariable = 0;
page71image13296 page71image13456

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [66]

Instruments User Guide

page72image952

列表 7-1 顯示了一個動做腳本樣本,它從內核變量 avenrun 檢索當前加載信息, 使用這些變量來計算系統平均加載的平均事件。若是你打算使用 Profile provider 來建立一個探針,你能夠使用這個腳原本週期性的收集加載數據,而後在 Instruments 應用裏面圖示化該信息。

7.2.8 變量做用域

DTrace 腳本有一個基本扁平的結構,由於缺少流程控制語句,並且其設計爲了保 證探針的執行時間最小化。然而 DTrace 腳本里面的變量,根據你的需求劃分到不一樣 的做用域。表 7-3 列出了這些變量的做用域級別,和在每一個級別使用這些變量的語法。

Listing 7-1 Accessing kernel variables from a DTrace script

page72image4888 page72image5312 page72image5472
this->load1a = `avenrun[0]/1000;
page72image6480 page72image6800 page72image7280
this->load1b = ((`avenrun[0] % 1000) * 100) / 1000;
page72image8368 page72image8688 page72image9168 page72image9328
this->load1 = (100 * this->load1a) + this->load1b;
page72image10440

Table 7-3 Variable scope in DTrace scripts

page72image13136 page72image13456 page72image13776 page72image15000 page72image15592

Scope

Syntax example

Description

page72image17296 page72image17456 page72image17616 page72image17776 page72image17936 page72image18256 page72image18416 page72image18896 page72image19056 page72image19216

Global variables are identified simply using the variable name. All probe

Global

myGlobal = 1;

page72image21680

actions on all system threads have access to variables in this space.

page72image22728 page72image22888 page72image23048 page72image23368 page72image23528 page72image24008 page72image24168 page72image24488 page72image24648
self‐>myThreadVar

Thread-local variables are dereferenced from the self keyword. All probe actions running on the same thread have access to variables in this space. You might use this scope to collect data over the course of several

Thread

page72image27920

= 1;

page72image28568

runs of a probe’s action on the current thread.

page72image29496 page72image29656 page72image29816 page72image30136 page72image30296 page72image31040 page72image31200 page72image31360 page72image31520 page72image31944

this‐>myLocalVar =

Probe-local variables are dereferenced using the this keyword. Only the current running probe has access to variables in this space. Typically, you use this scope to define temporary variables that you want the kernel to

Probe

page72image35216

1;

page72image35824

clean up when the current action ends.

7.2.9 查找腳本錯誤

若是你的自定義 instruments 工具的腳本代碼包含一個錯誤,當你使用 DTrace 邊緣該腳本的時候,Instruments 應用會在跟蹤面板顯示該錯誤的信息。Instruments 應用在你在你的跟蹤文檔裏面按下 Record 按鈕但跟蹤又沒有真正開始的時候報告你 該錯誤。在錯誤消息的氣泡裏面包含了一個編輯按鈕。單擊該按鈕來打開 instrument 工具的配置表,它此刻會標識探針的一個錯誤。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [67]

Instruments User Guide

page73image1008

7.3 導出DTrace腳本

儘管 Instruments 應用提供了很方便的接口來收集跟蹤數據,可是不少時候直接 使用 DTrace 來收集數據會更加方便。例如,若是你是一個系統管理員,或者正在編 寫自動化測試腳本,你可能更喜歡使用 DTrace 命令行接口來加載一個進程並收集數 據。然而,使用命令行工具要求你編寫本身的 DTrace 腳本,該腳本可能很費時甚至 出現不少錯誤。若是你已經擁有了一個包含一個或多個基於 DTrace 的 instrument 工具的跟蹤文檔,你能夠使用 Instruments 應用程序來生成一個 DTrace 腳本,該腳 本和你在跟蹤文檔裏面的 instruments 工具提供了相同的行爲。

Instruments 應用只支持那些全部 instruments 工具都是基於 DTrace 的文檔導出 DTrace 腳本。這意味着你的文檔能夠包含自定義 instruments 工具和少數內置 instruments 工具(好比庫窗口中 File System 和 CoreData 組的 instruments 工具)。 關於一個 instrument 工具是不是基於 DTrace,請參考「內置 instruments 工具」的 介紹。

爲了導出一個 DTrace 腳本,選中包含 instruments 工具的跟蹤文檔,選擇 File > DTrace Script Export。該命令爲你的 instruments 工具把腳本放入了一個文本文件, 它和你使用帶有-s 選項的 dtrace 的命令工具建立的文本文件同樣。好比,若是你導 出一個名爲 MyInstrumentsScript.d 的腳本,你可能要在終端運行如下命令:

注意:大部分狀況下你必須使用超級用戶的權限來運行 dtrace,這是爲何 sudo 命令會在上面的 例子中被放在 dtrace 的前面。

爲你的 Instruments 應用導出你腳本文件(相對應手動編寫)的另外一個優點是在 你運行腳本後,你能夠導入結果數據到 Instruments 應用裏面,並評審它。從 Instruments 應用導出的腳本會打印一個開始標誌(<dtrace_output_begin>)在 dtrace 輸出文件的開頭。爲爲了收集數據,簡單的拷貝全部 DTrace 在終端輸出的信 息,並把它粘貼到文本文件裏面,或者簡單的在 dtrace 命令後面重定向輸出到一個 文件裏面。爲了導入 Instruments 應用的數據,選中生成原始腳本的跟蹤文檔,並選 擇 File > DTrace Data Import。

page73image8816 page73image8976 page73image9400 page73image9560 page73image9720 page73image9880 page73image10040 page73image10464
sudo dtrace -s MyInstrumentsScript.d
page73image11192 page73image11352

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [68]

Instruments User Guide

page74image920

第八章 內置instruments工具

Instruments 應用裏面內置了許多 intruemtns 工具。每一個 instrument 工具都包 含它本身的配置選項和顯示信息的方式,及收集合適的數據類型。內置的 instruments 工具按照它收集的數據類型分組爲少數幾個類別。如下個部分更詳細的 描述了內置 instruments 工具。

8.1 Core Data Instruments[Core Data相關]

如下的 instruments 工具收集的數據和 Core Data 應用的事件相關。你能夠使用 這些 instruments 工具返回的信息來評估各類事件對應用性能的影響和來定位潛在 問題並修復它。

8.1.1 Core Data Saves

Core Data Saves instrument 工具記錄了 Core Data 應用中保存的操做。該 instrument 工具能夠在單一進程或全部當前系統運行的進程中執行操做。它只爲這 些使用 Core Data 的進程記錄數據。該 instrument 工具在它的實現上使用了 DTrace, 並能夠導入一個 DTrace 腳本。

詳細面板的樣本數據
該 instrument 工具捕獲如下信息:

  •  Caller(調用者) 啓動保存操做的方法的名稱(包括棧跟蹤信息)。

  •  Save duration(保存耗時) 保存的耗時時間,以微秒爲單位。

    跟蹤面板的顯示項
      跟蹤面板能夠被設置來顯式如下任一信息數據:
    
  •  Stack depth(棧深度) 棧調用的深度。

  •  Thread ID(線程 ID) 線程標示符。

  •  Save duration(保存耗時) 保存操做的消耗時間。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [69]

Instruments User Guide

page75image912

擴展詳細面板的補充數據 對於詳細面板的每一個事件,你能夠打開對應的擴展詳細面板來查看它的棧調用的

跟蹤和事件發生的對應時間。

8.1.2 Core Data Fetches

Core Data Fetches instrument 工具記錄 Core Data 應用中提取保存數據的操做。 該 instrument 工具能夠運行在單一進程或全部系統當前運行的進程之上。它只會記 錄使用 Core Data 的進程的數據。該 instrument 工具在實現上使用了 DTrace,並可 以導入 DTrace 腳本。

詳細面板的樣本數據
該 instruments 工具捕獲如下信息:

  •  Caller(調用者) 啓動提取操做的方法名(包括棧跟蹤信息)。

  •  Fetch entity(提取的條目) 被提取的條目的名稱。

  •  Fetch count(提取總數) 提取條目的總數。

  •  Fetch duration(提取耗時) 提取操做消耗的時長,以微秒爲單位。

    跟蹤面板的顯式項
      能夠設置跟蹤面板來顯式如下任何的數據:
    
  •  Stack depth(棧深度) 棧調用的深度。

  •  Thread ID(線程 ID) 線程標示符。

  •  Fetch count(提取總數) 提取條目的總數。

  •  Fetch duration(保存耗時) 提取操做的消耗時間。

    擴展詳細面板的補充數據 對於詳細面板的條目,你能夠打開它對於的擴展詳細面板來查看調用的棧信息和

    對應事件發生的時間。

    8.1.3 Core Data Faults

    Core Data Faults instrument 工具記錄 NSManagedObject 或它的一對多關係的 延遲初始化過程當中發生的故障事件。該 instrument 工具能夠運行在單一進程或全部 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [70]

Instruments User Guide

page76image920

系統當前運行的進程上面。它只收集使用了 Core Data 的進程的數據。該 instrument 工具的實現使用了 DTrace,並能夠導入 DTrace 腳本。

詳細面板的樣本數據
該 instruments 工具捕獲如下信息:

  •  Caller(調用者) 觸發故障的操做的方法名(包括棧跟蹤信息)。

  •  Fault object(故障對象) 引起故障的對象的名稱。

  •  Fault duration(故障耗時) 故障處理例程的執行時長(以微秒爲單位)。

  •  Relationship fault source(相關故障源)

  •  Relationship(相關關係) 關係名稱。

  •  Relationship fault duration(相關故障的耗時)

    單位)。

    跟蹤面板的顯式項
      能夠設置跟蹤面板來顯式如下任何的數據:
    
    •  Stack depth(棧深度) 棧調用的深度。

    •  Thread ID(線程 ID) 線程標示符。

    •  Fault duration(故障耗時)

    •  Relationship fault duration(相關故障的耗時)

      擴展詳細面板的補充數據 對於詳細面板的條目,你能夠打開它對於的擴展詳細面板來查看調用的棧信息和

      對應事件發生的時間。

      8.1.4 Core Data Cache Misses

      Core Data Cache Misses instrument 工具記錄高速緩存未命中致使的故障事件。 該 instrument 工具能夠運行在單一進程或全部系統當前運行的進程上面。它只記錄 使用了 Core Data 的進程。該 intrument 工具的實現使用了 DTrace,並能夠導入 DTrace 腳本。
      注意:該 instrument 工具提供了 Core Data Fault instrument 工具提供的行爲的一個子集, 可是它對你分析整個應用程序的性能更有幫助。 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [71]

相關故障的耗時(以微秒爲

RCM duration (相關高速緩存未命中耗時) 秒爲單位)。

跟蹤面板的顯式項
  能夠設置跟蹤面板來顯式如下任何的數據:
相關高速緩存未命中的耗時(以微

Instruments User Guide

page77image2400

詳細面板的樣本數據
該 instruments 工具捕獲如下信息:

  •  Caller(調用者) 觸發高速緩存未命中的方法名(包括棧跟蹤信息)。

  •  Cache Miss(高速緩存未命中) 引起高速緩存未命中的對象的名稱。

  •  CM duration(高速緩存未命中的耗時) 故障處理例程執行所用時長(以微爲單

    位)。

  •  RCM source(相關高速緩存未命中源) 高速緩存未命中的相關源。

  •  RCM Relationship(相關高速緩存未命中關係) 關係名稱。

  •  Stack depth(棧深度) 棧調用的深度。

  •  Thread ID(線程 ID) 線程標示符。

  •  CM duration(高速緩存未命中耗時) 如上。

  •  RCM duration(相關高速緩存未命中耗時) 如上。

    擴展詳細面板的補充數據 對於詳細面板的條目,你能夠打開它對於的擴展詳細面板來查看調用的棧信息和

    對應事件發生的時間。

    8.2 Dispatch Instruments[併發相關]

    該 instrument 工具收集和 Grand Central Dispatch(GCD)相關的數據。GCD 是實 現併發執行異步任務的技術。GCD 在 Mac OS X v10.6 及其以後可用,在 iOS 上面不 可用。

    爲了高效使用 Dispatch instrument 工具,你須要對 GCD 的隊列和 block 對象比 較熟悉。關於更多信息,參閱 Concurrency Programming Guide(併發編程指南)。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [72]

Instruments User Guide

page78image912

8.2.1 Dispatch

Dispatch instrument 工具捕獲由你應用程序建立的 GCD 隊列和在這些隊列上執 行的 block 對象的信息。它向你展現了應用程序隊列和 block 對象執行的行爲。它記 錄隊列的生命週期,和跟蹤 block 的調用和執行的時間。

Dispatch 幫助你微調 blocks 的執行。它向你展現了那個 block 執行的次數最多 和它們佔用了多久 CPU 時間來執行。你能夠找到這些你已經放入隊列執行的 blocks 的熱點並優化這些 blocks 的代碼。你也能夠找到隊列中同步執行的 blocks 的狀況。 (GCD 隊列在工做異步執行的時候能夠更高效的執行)。

Dispatch 運行在當個進程上面。該 instrument 工具的實現使用了 DTrace,可是 Dispatch 的跟蹤數據不能被導入到一個 DTrace 腳本里面。

對於詳細面板的條目,你能夠打開對於的擴展詳細面板來查看棧跟蹤的調用信 息,和這些事件發生的對應時間。

Dispatch 提供了幾種跟蹤數據查看的方式。主要的查看模式有隊列視圖(queues view)、調用樹視圖(call tree view)、塊視圖(blocks view)。默認視圖是調用樹視 圖。你能夠使用位於詳細面板下面的按鈕來顯示三個主要視圖的任何一種。

隊列視圖(Queues View)
隊列視圖顯示應用程序建立的全部隊列、在它們上面執行的 blocks 和相關的分

析。
  隊列視圖顯示如下信息:
  •  Graph(圖形)若是該選項被選中,Dispatchinstrument工具會在跟蹤面板上面 顯示該隊列的直方圖統計信息。

  •  Queue Name(隊列名稱)隊列建立的時候用戶給它賦值的名稱。隊列全局名稱是 有系統賦值的。

  •  Conc(並行)Concurrent的縮寫,代表該隊列是並行的(而不是串行)。

  •  Live(活躍)代表該隊列是活躍的(還沒被釋放)。

  •  #Blocks(塊)當前被添加進入隊列還沒被調用的blocks的數量。

  •  #Sync(同步)已經被同步調度的blocks的數量。

  •  Total Processed(總處理)已經被執行了的 blocks 的數量。 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [73]

Instruments User Guide

page79image920
  •  Latency(潛伏期)blocks 待在隊列的平均時間(以微秒爲單位)。換而言之,調 用時間和進入隊列時間之間的差別。

  •  TotalCPUTime(總CPU時間)指定隊列的blocks在CPU上面執行的總時間(以 微秒爲單位)。

    你能夠在跟蹤面板上面選擇顯示一個或多個隊列的數據。跟蹤面板能夠被設置來 顯示如下任何的數據:

  •  Blocks Processed(已處理的塊)特定時間週期被處理的 blocks 的數量。默認

    時間週期爲 10 微秒。

  •  Block Count(塊數)特定的時間週期內當前仍在隊列裏面 blocks 的數量。

  •  CPU Usage(CPU 佔有率)特定週期內 CPU 的活躍程度。

  •  Work Time(工做時間)特定時間週期內隊列的 blocks 消耗的 CPU 總時間。

  •  Latency(潛伏期)特定週期內block的平均潛伏期(以微秒爲單位)。

    對於隊列視圖上面顯示的每一個隊列,你能夠單擊它的焦點按鈕來查看已經添加進 入隊列的 blocks 和使用隊列調用了的 blocks 的列表。若是你比較在意你的 blocks 執行的順序或你想要得到棧跟蹤的詳細視圖的話,該隊列視圖是頗有幫助的。你能夠 選中一個 block,並在擴展詳細面板上面查看該 block 入隊列和調用的棧跟蹤信息。

    調用樹視圖(Call Tree View) 調用樹視圖集合了全部棧跟蹤和顯示它們的調用樹。若是你經過隊列劃分調用

    樹,你能夠查看那個隊列是最活躍和有最多 blocks 被調用。 調用樹視圖顯示如下的信息:

  •  %Calls(調用百分比)當前棧跟蹤已經出現的調用百分比。

  •  #Calls(調用次數)當前棧跟蹤已經出現的次數。

  •  Library(庫)棧跟蹤出現所在的framework或bundle的名稱。

  •  Symbol Name(符合名)棧跟蹤的幀標示符。

      跟蹤面板能夠被設置來顯示如下的數據:
    
  •  Blocks Invoked(Blocks 調用)特定週期內指定調用類型的 blocks 的數量。

  •  Total Work Time(總工做時間)特定週期內 blocks 的消耗的總 CPU 時間。

    對於調用樹視圖的每一個符號,你能夠單擊它的焦點按鈕來修整的其他的樹來集中

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [74]

Instruments User Guide

page80image920

於你關注的節點和它的子節點。你能夠選中一個 block 並在擴展詳細面板上面查看該 block 最重要的棧跟蹤信息。

Blocks視圖(Blocks View)
Blocks 視圖顯示 block 和隊列的信息。該視圖顯示全部在隊列上下文被執行的

blocks,包括沒有被顯式入隊列的。好比,若是 block A 被添加入隊列而且此時執行 block B,那麼這兩個 block 都會被顯示在 Blocks 視圖上面,可是隻有 block A 被顯 示在隊列視圖上面(Queues View)。

Blocks 視圖顯示如下信息:

  •  Graph(圖形)若是該選項被選中,該instrument工具會在跟蹤面板上面顯示該

    block 的直方圖統計信息。

  •  Blocks Name(Blocks 名稱)編譯器給 block 賦值的名稱。

  •  Block Library(Blocks 庫)Block 聲明所在的 framework 或 bundle。

  •  Total Work Time(總工做時間)該 block 的全部調用的中的執行時間(以微秒

    爲單位)。

  •  AverageWorkTime(平均工做時間)該block的平均執行時間(以微秒爲單位)。

  •  Count(調用次數)該block被調用的次數。

    該 block 的擴展詳細面板顯示了最多調用棧跟蹤的信息。該 Block 在該棧跟蹤裏 面常常被調用。

    你能夠在跟蹤面板上面選擇顯示一個或多個 blocks 的數據信息。跟蹤面板能夠 被設置來顯示如下的數據:

    •  Blocks Invoked(Blocks 調用)特定週期內指定調用類型的 blocks 的數量。

    •  Total Work Time(總工做時間)特定週期內 blocks 消耗的總的 CPU 時間。

      對於 Blocks 視圖裏面每一個 block,你能夠單擊它的焦點按鈕來查看一列使用來執 行 block 的隊列。對於每一個隊列,你能夠單擊它的焦點按鈕來查看和該隊列相關的一 列 blocks。若是你關注那個 blocks 被隊列的上下文調用和它們相應的執行順序的話, 那個 Blocks 視圖將很是有幫助。

      8.3 Energy Diagnositics Instruments[電池診斷相關]

      此部分的相關 instruments 工具提供了 iOS 設備上面關於能量使用的診斷。它們

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [75]

Instruments User Guide

page81image920

同時測量設備主原價的開 - 關的狀態。
iOS 設備在使用電池電源和外部電源的具備不一樣的表現行爲。這會影響在這些

instruments 工具上面收集到的數據。特別是 Energy Usage instrument 工具被影響 到。但設備鏈接到外部電源的時候,它不會影響測試能量使用(Energy Usage)狀況。

如下是這些 instruments 工具的典型工做流程:

  1. 鏈接設備到你的開發環境。

  2. 啓動Xcode或Instruments應用。

  3. 在設備上面,選擇Settings>Developers,並打開電源日誌(powerlogging)。

  4. 斷開設備,並執行所需的測試。

  5. 從新鏈接設備。

  6. 在 Instruments 應用裏面打開 Energy Diagnostics 模板。

  7. 選擇 File > Import Eneryg Diagnostics from Device。

      當你執行下面操做的時候,電量診斷的數據會被清空:
    
  •  關閉設備的電源日誌。

  •  斷開設備並重啓。

  •  電池電量消耗完成。

    8.3.1 電量使用(Energy Usage)

    Energy Usage instrument 工具測量設備啓動後的電量使用。該 instrument 工具 提供了大量工做流程的宏觀測量。時間刻度對於比較運行的不一樣頗有幫助。電源事件 (標誌)以編程方式添加。

    詳細視圖將會顯示如下的信息:
    Energy Usage Level(電量使用級別)在刻度 0-20 之間的相關電量使用。
    Power Source Events(電源事件)電池或外部電源的轉換。
    注意:Energy Usage instrument 工具當前支持 iPhone 3GS 和第三代 iPod touch 及以上的 設備。

    8.3.2 CPU 活動(CPU Acitivity)
    CPU Activity instrument 工具給出了一個設備在作什麼的指示。該 instrument

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [76]

Instruments User Guide

page82image920

工具提供了一個 Activity Monitor instrumentation 的簡明版本。 詳細視圖顯示瞭如下信息:

  •  Time(時間)測量的時間間隔。

  •  Total Activity(總活動)CPU 活動的百分比。

  •  Foreground App Activity(前臺應用的活動)前臺應用程序的活動的百分比。

  •  Audio Processing(音頻處理)音頻活動的百分比。

  •  Graphics(圖形)圖形活動的百分比。

  •  App Activity(應用活動)應用狀態切換。

    8.3.3 顯示亮度(Display Brightness)

    Display Brightness instrument 工具記錄影響電量使用的亮度的改變狀況。該 instrument 工具不會記錄由於環境光傳感器形成的亮度改變事件。

    你能夠設置屏幕的默認亮度,經過選擇 Settings > Brightness。當屏幕開啓, 記錄跳轉到預設的水平。當屏幕關閉時,記錄降低到零。

    8.3.4 休眠/喚醒(Sleep/Wake)

    若是設備正在運行,這 Sleep/Wake instrument 工具會顯示一個紅色帶,但若是 設備正處於休眠狀態,或試圖進入休眠狀態,或重休眠狀態中喚醒時,它則顯示一個 較深顏色的頻段。在休眠期間,電量測量會顯示爲零。該 instrument 工具對相關的 instruments 工具很是有幫助。

    8.3.5 藍牙(Bluetooth)
    若是藍牙開啓可用時,Bluetooth instrument 工具會顯示一個紅色頻段,不然如

    果藍牙關閉時,這顯示一個黑色頻段。
    

    8.3.6 無線(WiFi)
    若是 WiFi 啓用的時候,WiFi instrument 工具顯示一個紅色的頻段,不然若是

    WiFi 關閉時,顯示一個黑色頻段。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [77]

Instruments User Guide

page83image912

8.3.7 定位(GPS)
若是 GPS 啓用時,GPS instrument 工具顯示一個紅色的頻段,不然若是 GPS 關閉,

則顯示一個黑色的頻段。

8.4 File System Instruments[文件系統相關]
該部分的 instruments 工具分析文件系統的信息和活動,好比讀和寫操做,權限

等等。

8.4.1 I/O 活動(I/O Activity)

I/O Activity instrument 工具記錄 I/O 事件:函數調用,好比在文件系統上面 的 read、write、open、close 等操做。你能夠使用該 instrument 工具來啓動和樣本 分析單個運行在 iOS 設備上面的進程。儘管 I/O Activity instrument 工具提供了 一個調用樹的回溯跟蹤視圖,在 Mac OS X 上有相似 I/O Activity instrument 工具 的 fs_usage 實用工具。

在詳細面板,你能夠選擇如下的一個或多個類別。每一個類別包含了一組探針 (probes)(BSD 函數)。
File Attributes(文件屬性)

getattrlist setattrlist listxattr

File Permissions(文件權限) chmod

fchmod chown fchown access

Open and Close(打開和關閉文件) open

fdopen 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [78]

Instruments User Guide

page84image912

fopen freopen close fclose

  •  Other(其餘) lseek

    fsync dup
    dup2 link unlink

  •  Read and Write(讀寫操做) read

    pread readv write pwrite writev

  •  Shared Memory(共享內存) shm_open

    shm_unlink

  •  Sockets(套接字)

    recv
    recvfrom recvmsg send
    sendmsg sendto

  •  Stats(統計) 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [79]

Instruments User Guide

page85image920

lstat
lstat64
stat
stat64
fstat
fstat64
I/O Activity instrument 工具捕獲如下信息:

  •  Function(函數)被調用的函數的名稱。

  •  Duration(時長)函數調用的時長。

  •  In File(輸入文件)輸入文件描述符。

  •  In Bytes(輸入字節)要求讀或寫的字節的數量。

  •  Out File(輸出文件)輸出文件描述符。

  •  Out Bytes(輸出字節)實際讀或寫的字節數量。

  •  Thread ID(線程 ID)線程的標示符。

  •  Stack Depth(棧深度)函數調用期間使用的棧幀的數量。

  •  Error(錯誤)函數調用期間最近出現的錯誤。

  •  Path(路徑)可執行文件執行操做的文件路徑。

  •  Parameters(參數)函數調用的參數。對於特定函數的參數的描述,參閱相應API

    文檔。

      跟蹤面板能夠被設置來顯示如下的數據信息:
    
  •  Sample number(樣本數量)

  •  Call duration(調用時長)

  •  Input file descriptor(輸入文件描述符)

  •  Input bytes(輸入字節)

  •  Output file descriptor(輸出文件描述符)

  •  Output bytes(輸出字節)

  •  Thread ID(線程 ID)

  •  Stack depth(棧深度)

    對於任何函數的調用,你能夠打開該調用的對應擴展詳細面板來查看整個調用的

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [80]

Instruments User Guide

page86image920

回溯跟蹤信息。該 instrument 工具還在詳細面板提供了一個調用樹視圖。
I/O Activity instrument 工具某些時候被用來配合其餘 iOS instruments 工具 使用。好比,你能夠配合使用 I/O Activity instrument 工具和 OpenGL ES Driver

instrument 工具來檢查紋理加載進程。

8.4.2 文件鎖(File Locks)

File Locks instrument 工具記錄調用 flock 函數時諮詢文件鎖的操做。該 instrument 工具能夠運行在單個進程或全部當前系統運行的進程上面。該 instrument 工具的實現使用了 DTrace,並能夠導入 DTrace 腳本。

該 instrument 工具捕獲如下信息:

  •  函數名稱

  •  函數調用者(包括可執行文件名稱和棧跟蹤信息)

  •  鎖住的文件路徑

  •  操做類型,它是一個整形變量,有如下相應的值(包括這些值的組合):

    1 - 共享鎖 2 - 獨佔鎖

4 - 不阻塞鎖
8 - 解鎖 跟蹤面板能夠被設置來顯示如下的數據:

  •  棧深度(Stack depth)

  •  線程 ID(Thread ID)

  •  時間戳(Timestamp)

    對於詳細面板的條目,你能夠在擴展詳細面板打開該調用的棧跟蹤信息,和任何 探針的信息、事件發生的時間。

    8.4.3 文件屬性(File Attributes)

    File Attributes instrument 工具記錄文件系統中文件的全部者和訪問權限的改 變事件。該 instrument 工具能夠運行在單個進程或全部當前系統運行的進程上面。 該 instrument 工具的實現使用了 DTrace,並能夠導入 DTrace 腳本。該 instrument

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [81]

Instruments User Guide

page87image912
工具關於每一個函數調用的如下信息:
  •  經過chmod和fchmod函數修改的文件權限

  •  經過chown和fchown函數修改文件全部者和所在的組

    對於每一個函數調用,instrument 工具捕獲如下信息:

  •  函數的名稱

  •  函數的調用者(包括可執行文件的名稱和棧跟蹤信息)

  •  可執行文件操做的文件路徑

  •  被修改的文件的文件描述符

  •  模式標誌,它指示了能夠在文件上面應用的權限(該值只在調用fchmod的chomod

    時才被捕獲)

  •  文件的新的全部者的用戶ID(該值只在調用fchown的chown時才被捕獲)

  •  文件的新組的組ID(該值只在調用fchown的chown時才被捕獲) 注意:關於模式標誌的解析更多信息,參見 chmod 的主頁。

      跟蹤面板能夠被設置來顯示如下的信息:
    
  •  棧深度(Stack depth)

  •  線程 ID(Thread ID)

  •  文件描述符(File descriptor)

  •  模式(Mode)

  •  用戶 ID(User ID)

  •  組 ID(Gopup ID)

    對於詳細面板的條目,你能夠在擴展詳細面板打開該調用的棧跟蹤信息,和任何 探針的信息、事件發生的時間。

    8.4.4 文件活動(File Activity)

    File Activity instrument 工具可讓你監聽文件的訪問。該 instrument 工具 能夠運行在單個進程或系統全部當前運行的進程之上。該 instrument 的實現使用了 DTrace,並能夠導入 DTrace 腳本。該 instrument 工具捕獲如下函數的調用信息: 打開和新建一個能夠讀取或寫入的文件(open)

    刪除從每一個進程的引用表的描述符(close) 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [82]

Instruments User Guide

page88image920
  •  獲取關於一個文件的信息(fstat) 對於每一個函數的調用,該 instrument 捕獲如下的信息:

  •  函數的名稱

  •  函數的調用者(包括可執行文件的名稱和棧跟蹤信息)

  •  可執行文件操做的文件路徑

  •  文件的文件描述符

      跟蹤面板能夠被設置來顯示如下的數據:
    
  •  棧深度(Stack depth)

  •  線程 ID(Thread ID)

  •  文件描述符(File descriptor)

    對於詳細面板的條目,你能夠在擴展詳細面板打開該調用的棧跟蹤信息,和任何 可用探針的信息、事件發生的時間。

    8.4.5 目錄I/O(Directory I/O)

    Directory I/O instrument 工具記錄目錄的相關操做,好比移動目錄,建立符合 鏈接等等。該 instrument 工具能夠運行在單個進程或全部當前系統運行的進程之上。 該 instrument 工具的實現使用了 DTrace,並能夠導入 DTrace 腳本。該 instrument 工具捕獲如下函數的調用信息:

  •  delete - 刪除一個文件和目錄

  •  link - 建立一個硬鏈接或符合鏈接

  •  mkdir - 建立一個目錄

  •  mount - 掛載一個文件系統

  •  rename - 修改一個文件或目錄的名稱

  •  rmdir - 移除一個目錄

  •  symlink - 新建一個符合鏈接

  •  unlink - 移除一個鏈接

  •  unmount - 卸載一個文件系統

    對於每一個函數的調用,該 instrument 捕獲如下的信息:

  •  函數的名稱

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [83]

Instruments User Guide

page89image936
 
函數的調用者(包括可執行文件的名稱和棧跟蹤信息)
可執行文件操做的文件或目錄的路徑
新文件或目錄的名稱(在適當狀況下)

跟蹤面板能夠被設置來顯示如下的數據: 棧深度(Stack depth)
線程 ID(Thread ID)

 對於詳細面板的條目,你能夠在擴展詳細面板打開該調用的棧跟蹤信息,和任何
可用探針的信息、事件發生的時間。

8.5 Garbage Collection Instruments[垃圾回收相關]

該部分的 instruments 收集由垃圾回收器回收內存的信息。爲了使用這些 instruments 工具,程序必須是創建在垃圾回收器之上並啓用垃圾自動回收功能。關 於編寫一個垃圾回收器的程序,參閱 Garbage Collection Programming Guide。

8.5.1 GC Total

GC Total instrument 工具追蹤全部由垃圾回收器分配和釋放的對象或字節的總 數量。該 instrument 工具能夠運行在單個進程或全部當前系統運行的進程之上。該 instrument 工具的實現使用了 DTrace,並能夠導入 DTrace 腳本。它記錄只啓用了垃 圾回收的進程的數據。

 

該 instrument 工具捕獲如下信息: 對象初始化和回收函數(包括棧跟蹤信息) 有垃圾回收器回收的對象的數量 由垃圾回收器回收的所有字節的數量 所有已分配且仍然使用中的本身數量 所有已經回收和正在使用中的字節的數量

跟蹤面板能夠被設置來顯示如下數據: 棧深度(Stack depth)
線程 ID(Thread ID) 回收的對象(Objects reclaimed)

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [84]

 

該 instrument 工具捕獲如下信息: 對象的初始化和回收函數(包括棧跟蹤信息) 分配內存的區(zone) 事件是不是分代的(1爲YES,0爲NO) 由垃圾回收器回收的對象的數量 由垃圾回收器回收的字節的數量 清除時間的持續時間(以微秒爲單位)

跟蹤面板能夠被設置來顯示如下信息: 棧深度(Stack depth)
線程 ID(Thread ID)
區(Zone)

是否分代(Is generational)(分代回收器查找由非分代回收器錯過的不在使用 的比較舊的對象,但它須要運行更長的時間,因此不常常運行) 回收的對象(Objects reclaimed)
回收的字節(Bytes reclaimed)

持續時間(Duration) 對於詳細面板的條目,你能夠在擴展詳細面板打開該調用的棧跟蹤信息,和任何

可用探針的信息、事件發生的時間。

Instruments User Guide

page90image7096

回收的字節(Bytes reclaimed) 正在使用的字節(Bytes in use) 所有字節(Total bytes)

 對於詳細面板的條目,你能夠在擴展詳細面板打開該調用的棧跟蹤信息,和任何
可用探針的信息、事件發生的時間。

8.5.2 垃圾回收(Garbage Collection)

Garbage Collection instrument 工具測量垃圾回收器清除階段的回收數據。該 instrument 工具能夠運行在當個進程或全部當前系統運行的進程之上。該 instrument 工具的實現使用了 DTrace,並能夠導入一個 DTrace 腳本。它只記錄啓動 了垃圾回收的進程的數據。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [85]

Instruments User Guide

page91image920

8.6 Graphics Instruments[繪圖相關] 該部分的 instruments 工具收集和繪圖相關的數據。

8.6.1 核心動畫(Core Animation)

Core Animation instrument 工具測量一個運行在 iOS 設備上面的進程每秒的核 心動畫幀的數量,以及屏幕外的幀計數。

此外,Core Animation instrument 工具能夠提供一個可視化的提示(hints)來幫 助你理解內容是如何被渲染到屏幕的。該 instrument 工具包含了許多可選的選項來 容許你選擇特定類型的渲染提示(rendering hints)。提示工做在設備上的任何程序。 沒有必要記錄樣本數據來激活提示。但你關閉 Instruments 文檔或刪除該 instrument 工具時,提示會被伴隨關閉。若是有一個 OpenGL 的表層被顯示,渲染提示不會影響 該表層。

該 instrument 工具包含如下的渲染提示:

  •  着色混合層(Color Blended Layers),放置一個紅色(red)的覆蓋層在使用混合

    繪畫的圖層上面。放置一個綠色(green)的覆蓋層在不使用混合繪畫的圖層上面。

  •  着色複印的圖像(Color Copied Images),放置一個藍綠色(cyan)的覆蓋層在覈

    心動畫複印的圖像上面。

  •  當即着色(ColorImmediately),執行着色刷新操做以後,不須要等待10毫秒。

  •  着色未對齊的圖像(Color Misaligned Images),放置一個洋紅色(magenta)的

      覆蓋層在源像素不對齊目標像素的圖像上面。
    
  •  着色屏幕外渲染爲黃色(Color Offscreen-Rendered Yellow),放置一個黃色的

      覆蓋層在屏幕外渲染的內容上面。
    
  •  着色 OpenGL 快速路徑爲藍色(Color OpenGL Fast Path Blue),放置一個藍色

      的覆蓋層在從合成器分離的內容之上。
    
  •  閃光更新的區域(Flash Updated Regions)屏幕閃光更新的區域爲黃色。

    你能夠使用這些渲染提示來在不須要作必要繪圖的時查找出沒有改變的重繪內 容。

      跟蹤面板能夠顯示每秒的幀數。擴展詳細面板顯示每一個樣本點的分析。
    

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [86]

Instruments User Guide

page92image920

8.6.2 OpenGL驅動器(OpenGL Driver)

OpenGL Driver instrument 工具樣本分析 OpenGL 的統計信息。該 instrument 工 具能夠運行在單個進程或全部當前系統運行的進程上面。

該 instrument 工具捕獲如下信息:

  •  交換緩衝區數(Buffer swap count)

  •  客戶端 OpenGL 等待時間(Client GLWait time)

  •  每一個樣本的 2D 指令字節(Command 2D Bytes per sample)

  •  上下文 2D 的計數(Context 2D Count)

  •  上下文 OpenGL 計數(Context GLCount)

  •  上下文空閒緩衝區 2D 等待時間(Free Context Buffer 2D Wait time)

  •  圖形地址映射表的字節大小(Gart size bytes)- Gart 爲 Graphics Address

        Remapping Table
    
  •  表層計數(Surface count)

  •  紋理計數(Texture count)

  •  顯存空閒字節(Vram free bytes)- Vram 爲 Video Random Access Memory

  •  更多(and much more)

    安裝該 instrument 工具並打開擴展詳細面板,來查看捕獲數據的所有列表。 跟蹤面板指示了那些數據被收集。擴展詳細面板顯示了每一個樣本點的統計。

    8.6.3 OpenGL ES驅動器(OpenGL ES Driver)

    OpenGL ES Driver instrument 工具在 iOS 設備上查詢 GPU 驅動器來給單獨進程 進行 OpenGL 樣本統計分析。該 instrument 工具幫你肯定你已經使用了設備的 OpenGL 和 GPU 的效率。
    注意:Apple 已經售出各類 GPUs,每一個都有不一樣的統計數據集。Instruments 應用在查詢設 備以前是不知道有什麼統計數據將要顯示的。

    GPU 的硬件由兩部有效的組合:平鋪器(Tiler)和渲染器(Renderer)。一個場景被 平鋪並渲染。平鋪器和渲染器組件一般工做在不一樣的場景。每一個組件的利用率可能達 到 100%。

    平鋪器和渲染器利用率對於肯定瓶頸頗有幫助。渲染器利用率低下時意味着進程

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [87]

Instruments User Guide

page93image920

正等待被平鋪,此時下降場景的複雜度可能對緩解利用率問題。平鋪器和渲染器利用 率低下時暗示程序的其餘地方出現了瓶頸。

該 instrument 工具捕獲如下信息:

  •  上下文計數(ContextCount)全局OpenGL上下文的數量。須要注意的是能夠有

    其餘運行的進程(好比,SpringBoard)負責建立一個上下文。這一統計分析可

      以幫助你重點發現任何沒有獲得銷燬的錯誤上下文。
    
  •  命令緩衝區分配的字節數(Command Buffer Allocated Bytes)被分配用於存儲

    和提交命令緩衝區數據的字節數。該空間能夠用來提交全部 OpenGL 命令和用戶

    指定的頂點數據。

  •  命令緩衝區提交的字節數(Command Buffer Submitted Bytes)已經提交給驅動

    器的命令緩衝區字節數。該數量包括全部 OpenGL 命令和用戶指定的頂點數據。 每次提交時,已提交字節數(Submitted Bytes)會從總的內存量裏面遞增。你 可能須要經過它除以提交次數(Submit Count)所得的值來獲取每次提交的評價 使用值(該平均值老是稍微少於分配的字節數,由於分配的大小就是實際使用的 邊界)。

  •  命令緩衝區提交的次數(Command Buffer Submit Count)驅動器處理的命令緩 衝區的次數。一個命令緩衝區也許包含多個渲染器和切換器。每一個命令緩衝區被 傳給 GPU 時,該值會隨着遞增(每一個命令緩衝區可能包含零個或多個場景)。

  •  命令緩衝區渲染的次數(Command Buffer Render Count)GPU 渲染的 3D 幀的數 量。

  •  命令緩衝區切換次數(Command Buffer Transfer Count)驅動程序處理的交換 命令的顯示次數。

  •  渲染利用率%(Renderer Utilization %)GPU 花在執行分片處理的時間比例。

  •  平鋪器利用率%(Tiler Utilization %)GPU 花在頂點處理和平鋪的時間比例。

  •  設備利用率%(DeviceUtilization%)GPU花在執行一些平鋪和渲染工做的時間

    比例。

  •  平鋪場景的字節數(Tiled Scene Bytes)用於平鋪場景的字節數。值越大意味

    着場景越複雜。若是你的場景複雜到超出填充平鋪場景的字節時,你能夠使用分 割場景模式。但一般狀況下你應該避免使用該模式。統計數據是由每一個場景遞加

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [88]

Instruments User Guide

page94image920
  的。同時你須要使用字節數除以場景數。
  •  分割場景數(Split Scene Count)一個場景的部分進入分割場景模式的次數。

    但場景複雜度很高並且沒法把整個場景填充進入一個平鋪場景字節緩衝區的時 候,須要使用分割場景模式。分割的場景數和平鋪場景字節數能夠用來肯定渲染 的路徑,並且你須要下降該路徑的複雜度。更多的時候你應該避免使用分割場景。

  •  資源字節數(Resource Bytes)用於紋理的字節數。

  •  資源計數(Resource Count)使用中的紋理的數量。

  •  每秒核心動畫幀數(Core Animation Frames Per Second)核心動畫每秒顯示新

    的合成幀的數量。這些幀可能包含了 CAEAGLLayer 對象的 OpenGL ES 幀。 跟蹤面板指示數據什麼時候被收集的。 由於事件不被捕獲,因此在擴展詳細面板上面沒有相應的回溯跟蹤。相反,擴展

    詳細面板顯示了每一個樣本點的統計分析的全列表。
    

    8.6.4 OpenGL ES分析器(OpenGL ES Analyzer)

    OpenGL ES Analyzer 是一個在測量和分析應用程序中 OpenGL ES 活動的 iOS instrument 工具。該 instrument 工具包含了一個專業系統,該系統查找問題並提供 基於 Apple 硬件和軟件平臺最近實踐和複雜的知識。該 instrument 工具一樣提供了 一個大量的性能統計分析。

    應用程序每次調用 OpenGL ES 框架時,該 instrument 工具跟蹤調用並記錄時間、 時長、回溯跟蹤和其餘參數,並把信息更新到主機上。該 instrument 工具分析 OpenGL 命令流來計算有用的性能分析數據並驅動專業系統,而後反過來提供修正建議和性能 建議。

    好比,該 instrument 工具可能會告訴你它檢測到沒有使用頂點緩衝區對象的頂 點數據數組。頂點數組是保存在主內存的客戶端數據。若是把這些數據以頂點緩衝區 對象上傳到 GPU 的話將會更加高效。儘管它的實現有點複雜,但性能提升是顯著的。

    該 instrument 工具提供如下視圖:

    •  幀統計(Frame statistics)對應圖形的時間刻度。它會以表格形式呈現圖形中

      渲染的數據。

    •  分析結果(Analysis findings)專業系統的建議,和擴展詳細視圖的棧跟蹤。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [89]

Instruments User Guide

page95image920

使用不一樣的顏色來標示問題的嚴重性。你能夠擴展子層來查看每一個建議的特定事

件,而後更深層的擴展來查看由建議產生的 OpenGL ES 命令的序列。

  •  跟蹤功能(Functiontrace)OpenGL命令的所有列表,和擴展詳細視圖的參數和

    回溯跟蹤。

  •  API統計(APIstatistics)列出OpenGL調用惟一總時間和每次調用的平均時間。

  •  調用樹(Call tree)提供全部用戶調用 OpenGL ES 或 EAGL 函數的導航,利用

    instrument 工具的數據挖掘工具。 但你雙擊分析結果或跟蹤功能的回溯跟蹤符合時,將會顯示相關的源碼。 覆蓋部分是用來繞過在圖形管道的階段。這可以讓你隔離問題並找到你的代碼中的

    瓶頸。

    注意:OpenGL ES Analyzer instrument 工具不支持 iPhone 3GS 和第三代 iPod touch 以前 的設備。

    8.7 Input/Output Instruments[輸入輸出相關] 如下的 instrument 工具收集和 I/O 操做相關的數據。

    8.7.1 讀/寫(Reads/Wirtes)

    Reads/Writes instrument 工具記錄文件的讀取和寫入操做。該 instrument 工具 能夠運行在單個進程或系統當前運行的全部進程之上。該 instrument 工具的實現使 用了 DTrace,並能夠導入 DTrace 腳本。它收集關於每一個讀取和寫入函數的相關信息, 包括 read、write、pread 和 pwrite。

    該 instrument 工具捕獲如下信息:

    •  函數的名稱

    •  函數的調用者(包括可執行文件的名稱和棧跟蹤信息)

    •  可執行文件操做的文件的路徑

    •  被修改文件的描述

    •  讀取或寫入的字節樹

        跟蹤面板能夠被設置來顯示如下的數據:
      
    •  棧深度(Stack depth)

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [90]

Instruments User Guide

page96image912
  •  線程 ID(Thread ID)

  •  文件描述符(File descriptor)

  •  字節數(Bytes)

    關於任何這些調用,你能夠打開擴展詳細面板來查看該調用的棧跟蹤信息,和任 何可用探針的信息、事件發生的時間。

    8.8 Master Tracks Instruments[界面操做跟蹤相關] 主跟蹤軌跡(Master Tracks)部分包含了用戶界面的記錄器,它可讓你記錄

    並回放程序中用戶的一系列動做。
    

    8.8.1 用戶界面(User Interface)

    User Interface instrument 工具能夠加載一個程序或附加到一個進程之上,並 記錄你和界面之間的交互。你能夠屢次回放這些記錄,並運行任何其餘你選擇的 instruments 工具進行這樣的操做。你能夠使用該 instrument 工具來建立做爲你質 量保證計劃的一部分的用戶界面的可重複測試,並捕獲偶然發生的錯誤。User Interface instrument 工具的詳細使用在「使用用戶界面跟蹤工做(Working with a User Interface Track)」部分介紹。

    8.9 Memory Instruments[內存相關] 該部分的 instruments 工具跟蹤內存使用狀況。

    8.9.1 共享內存(Shared Memory)

    Shared Memory instrument 工具記錄共享內存的打開和取消連接。該 instrument 工具能夠運行在單個進程或系統當前正在運行的全部進程之上。該 instrument 工具 的實現使用了 DTrace 並能夠導入 DTrace 腳本。它收集關於每一個共享內存的訪問信息, 包括 shm_open 和 shm_unlink。

    該 instrument 工具捕獲如下信息:

    •  函數的名稱

    •  函數的調用者(包括可執行文件的名稱和棧跟蹤信息) 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [91]

Instruments User Guide

page97image920
  •  共享內存區域的名稱

  •  用來打開共享內存區域的標記(查看shm_open主頁)

  •  模式標記,指示該共享區域的訪問權限(查看chmod主頁)

      跟蹤面板能夠被設置來顯示如下的數據:
    
  •  棧深度(Stack depth)

  •  線程 ID(Thread ID)

  •  標誌(Flags)

  •  mode_t

    關於任何這些調用,你能夠打開擴展詳細面板來查看該調用的棧跟蹤信息,和任 何可用探針的信息、事件發生的時間。

    8.9.2 分配內存(Allocations)

    Allocations instrument 工具跟蹤應用的內存分配狀況。該 instrument 工具要 求你加載一個進程,以便它能收集進程開始以後的數據。

    該 instrument 工具捕獲如下信息:

    •  類別(Category)一般是一個 Core Foundation 對象、Objective-C 類、或原始

      內存塊(block)。

    •  淨分配字節數(Net Bytes)當前已經分配內存可是仍然沒有被釋放的字節的總

      數。

    •  淨分配數(#Net)當前已經分配內存但仍然沒有被釋放的對象或內存塊的數量。

    •  總分配字節數(Overall Bytes)全部已經分配內存,並且包括已經被釋放了的

      字節的總數。

    •  總分配數(#Overall)全部當前已經分配內存,包括已經被釋放了的對象或內存

      塊的總數。

    •  淨餘或所有內存分配(#Allocations)當前和所有分配數的直方圖。直方條一般

      爲藍色。當對象總數和最大值之間的比例或最大值和當前分配數的比例少於1/3 時,直方條會被修改成黃色。當比例等於 1/10 或更少時,直方條變爲紅色。

      儘管顯示的比例不必定是壞事(一般它們在應用程序長期運行期間是正常),

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [92]

Instruments User Guide

page98image920

Instruments 應用一般給它們標示不一樣的顏色來指出分配模式以便進行進一步的研 究。若是你發現類別(categories)的顏色爲紅色或黃色,你可能須要儘可能消除應用 程序給定類型的非必要的臨時內存分配。相似的,你可能只是簡單的儘可能消除高水位 標記的對象的數量。

詳細面板的數據表格包含了一個圖形列,其中包含了表中的每一行的複選框。當 指定類別的複選框被勾選時,instrument 工具在跟蹤面板裏面顯示特定類別的圖形。 Instruments 應用一般給每一個圖形類別賦一個顏色。

當你鼠標移動到詳細面板上面的類別名稱上時,會在類別名稱的旁邊顯示一個更 多信息的按鈕。單擊該按鈕會顯示關於該類別上的對象的詳細信息,包含如下屬性:

  •  塊(block)地址。

  •  函數調用或形成該分配事件的類。好比,你能夠看到該類裏面的那個方法對對象

    進行了引用。

  •  對象的建立時間。

  •  負責建立對象的庫。

    對於任一這些事件,你能夠打開擴展詳細面板來查看每一個對象內存分配的棧跟 蹤,包括分配的類型和事件發生的時間。

    對於特定對象(或內存塊)的實例,你能夠單擊該對象地址列的更多信息按鈕來 查看對象相關的內存分配事件。對於每一個內存分配事件,該 instrument 工具顯示以 下信息:

  •  對象(它的類型)的類別

  •  事件類型

  •  每一個事件的時間戳

  •  塊地址

  •  塊的大小

  •  負責分配塊的庫

  •  引起分配事件的函數

    對於任何分配事件,你能夠打開擴展詳細面板來查看棧跟蹤信息,同時也能夠查 看任何可用的事件信息和事件具體發生的時間。

    爲了進一步的過濾詳細面板的信息,你能夠配置 Allocation Lifespan options

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [93]

Instruments User Guide

page99image920

(內存分配存活期選項)。這些選項可讓你過濾基於如下標準的分配事件:

  •  全部建立的對象(All Objects Created) - 顯示全部對象,不管它們是否已經

    被釋放掉了。

  •  已建立的&仍然有效的(Created & Still Living) - 僅顯示當你中止記錄時仍

    然存在內存的對象。

    Allocations instrument 工具的檢查器可讓你配置 instrument 工具跟蹤信息 的方法。你能夠從該檢查器設置一下選項:

  •  記錄引用數。使用該選項來跟蹤每一個對象的引用計數。

  •  中止時丟棄未被記錄的數據。使用該選項來丟棄任何已經被收集了的當還沒被

    Allocations instrument 工具處理的數據。

    關於 Allocations instrument 工具的更多額外信息,參閱「使用 Allocations Instrument 工具分析數據(Analyzing Data with the Allocations Instrument)」。

    8.9.3 內存泄露(Leaks)

    Leaks instrument 工具檢查進程堆泄露的內存。你能夠使用該 instrument 工具 配合 Allocations instrument 工具來獲取內存地址的歷史記錄。該 instrument 工具 要求你加載一個進程以便它能夠從進程啓動時收集數據。

    該 instrument 工具捕獲如下信息:

  •  內存泄露的數量(The number of leaks)

  •  每一個泄露內存塊的大小(The size of each leak)

  •  泄露內存塊的地址(Address of the leaked block)

  •  泄露對象的類型(Type of the leadked object)

    詳細面板的每一個視圖模式以輕微不一樣的函數顯示泄露的數據。在列表模式下,該 instrument 工具顯示每一個泄露的百分比,而每一個內存泄露有助於發現內存泄露的總 數。在大綱模式下,數據被重組以便你能夠查看給定的符號有多少內存泄露。對於任 何模式的條目,在擴展詳細面板顯示內存泄露引起的深刻棧跟蹤信息。

    關於 Leaks instrument 工具的更多額外信息,參閱「查找內存泄露(Looking for Memory)」。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [94]

Instruments User Guide

page100image920

8.10 System Instruments[系統相關]
該部分的 instruments 工具收集系統活動和資源的數據。

8.10.1時間分析器(Time Profiler)

Time Profiler instrument 工具在規定的間隔內中止一個 Mac OS X 的程序並記 錄該程序內部線程的棧跟蹤信息。你能夠使用這些信息來肯定花費在你程序上面的執 行時間並提高你的代碼來減小運行時間。不像不少 instruments 工具,Time Profiler 工具不須要使用 DTrace 探針來實現功能。Time Profiler 工具運行在單個進程或所 有進程之上。

在採樣期間,該 instrument 工具捕獲如下信息:

  •  採樣開始的時間

  •  採樣的時長

  •  棧跟蹤信息(包括庫和調用者信息)

  •  採樣期間遇到的最大棧深度

  •  採樣期間遇到的最頻繁的函數(熱點幀)

    Time Profiler 工具讓你能夠以不一樣的方式來查看這些信息。在列表模式下,你 能夠查看按照時間順序採集的樣本,它顯示你代碼執行的順序。在大綱模式下,Time Profiler 提供了你程序調用棧的樹形視圖並顯示了調用棧裏對應調用函數的樣本數 量。

    爲了顯示一個函數的詳細調用棧,你能夠在大綱模式下擴展對應的項目或選擇一 個函數並打開擴展詳細面板。在大綱模式下,你能夠經過單擊 Option 鍵和條目的擴 展三角形來擴大給定條目的整個調用棧。

    跟蹤面板默認顯示每一個樣本時間點的棧深度。該視圖對於肯定你代碼執行的狀況 頗有幫助。由於它不像兩個不一樣的執行路徑結果產生相同的棧深度,當你查看圖形的 重複結構時,它多是相同的代碼被重複的執行。

    Time Profiler 的一個特性是在沒有真正運行 Instruments 應用也能夠記錄一個 分析信息(profile)。當你須要記錄一個瞬間事件或它可能須要不少時間來打開並配 置 Instruments 應用時,該特性將會排上用場。爲了以這種方式來記錄一個分析文件, 首先你需求確保 Instruments 應用沒有正在運行。按下 Dock 下的 Instruments 應用

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [95]

Instruments User Guide

page101image920

的圖標。Dock 將會顯示一個菜單項,其包含了 Time Profiler 的命令、設置和分析 文件。你能夠選擇分析一個特定進程,全部進程,或自動分析任何阻塞的進程。在分 析文件建立後,它會出如今 Instruments 應用的 Dock 菜單裏面的 Recent Time Profiles(最近時間分析文件)裏面。Instruments 應用打開並顯示分析數據。

Time Profiler instrument 工具和 Sampler instrument 工具備點相似,可是它 們之間也有不少的不一樣:

  •  TimeProfil以詐騙(Shark)的方式從內核空間收集回溯跟蹤數據。而Sampler

    工具從用戶空間收集數據。所以,Time Profiler 在收集數據方面比 Sampler 工 具更高效。
    注意:若是目標進程被優化來忽略幀指針,那麼 Time Profiler(以 Shark 方式)可能 產生不許確的回溯跟蹤數據。

  •  Time Profiler 能夠收集一個或多個進程的數據。Sampler 工具只能採集單一進 程。

  •  Time Profiler 能夠採集全部線程狀態或只在當前運行的線程。Sampler 工具通 常採樣全部線程狀態。一般狀況下,你可能只對正在運行的線程感興趣。當你的 應用被掛起時,你須要檢查全部線程的狀態。

    8.10.2旋轉監控器(Spin Monitor)

    Spin Monitor instrument 工具自動採樣系統上無響應的應用程序。當一個應用 程序 3 秒或更長內沒有從窗口服務器檢索事件時,它將會變爲無響應的應用程序。在 這段時間內沒有響應的應用程序實際上可能會作一些有益的工做,也多是被掛起。 你能夠該 instrument 工具生成的樣本信息來修改你的代碼以便保證你的程序能夠一 直保持及時處理事件。該 instrument 工具能夠運行在單個進程或系統當前運行的所 有進程之上。

    在採樣期間,該 instrument 工具捕獲如下信息:

    •  採樣開始時間

    •  採樣的時長

    •  棧跟蹤信息(包括庫和調用者信息)

    •  採樣期間遇到的最大棧深度

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [96]

Instruments User Guide

page102image920

採樣期間遇到的最頻繁的函數(熱幀) 詳細面板的每一個視圖模式以細微不一樣的方式顯示樣本數據。列表模式和大綱模式

開始時顯示此期間那個應用程序被採樣的會話。每一個會話負責一個時間段,該時間段 內應用程序被認定爲無響應,而你能夠擴展給定的會話來查看此時應用程序在作什 麼。在列表模式下,instrument 工具顯示了採樣期間最頻繁調用的函數相關的數據。 在大綱模式下,instrument 工具顯示每一個會話生成的樣本的數量。你也能夠使用 Sample Perspective 選項來顯示樣本運行的時間。

該 instrument 工具的檢查器可讓你設置收集樣本的速率。默認狀況下,該 instrument 工具每 10 毫秒收集一次樣本。

8.10.3取樣(Sampler)

Sampler instrument 工具在指定的時間間隔內中止一個應用程序並記錄應用程 序每一個線程的棧跟蹤信息。你能夠使用這些信息來肯定花費你應用程序執行時間的地 方並提升你的代碼來減小運行時間。不像許多 instruments 工具,Sampler instrument 工具不要求使用 DTrace 探針來實現功能。該 instrument 工具運行在單個進程之上。

Sampler instrument 工具記錄每一個樣本的如下數據類型:

  •  被執行的函數

  •  應用程序每一個線程的棧跟蹤信息

  •  樣本被採集的時間

    Sampler instrument 工具可讓你以不一樣的方式查看這些信息。在列表模式下, 你能夠按照樣本被採集的順序來查看它們,它顯示了你代碼執行的順序。在大綱模式 下,Sampler instrument 工具提供了你應用程序調用棧的樹型視圖,並顯示了裏面 每一個調用函數執行時的樣本的數量。

    在研究的一個正在運行程序的性能時,你應該比較函數的影響和函數的執行成 本。若是你的程序花費很長的時間來執行一個低影響的函數,該 instrument 工具可 以標記出該請狀況。而後你能夠使用樣本數據來找出爲什麼你的程序會花費這些時間和 誰調用這些函數,經過這樣你能夠修復你的代碼讓它減小被調用的頻率。

    爲了顯示一個函數的詳細調用棧,你能夠在大綱模式下擴展相應項目或選擇一個 函數,並打開擴展詳細面板。在大綱模式下,你能夠經過按下 Option 鍵和單擊對於

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [97]

Instruments User Guide

page103image920

條目擴展按鈕來擴展一個給定條目的的所有調用棧。 跟蹤面板默認顯示每一個樣本時間點的棧深度。該視圖能夠幫助識別你代碼當前正

在作什麼。由於兩個不一樣的執行路徑不太可能產生相同的棧深度,因此當你看到圖形 有重複的結構時,有多是同一代碼被重複執行了。若是該段代碼須要消耗很長時間 來執行,那它就是很好的優化目標。

關於 Sampler instrument 工具的額外信息,參閱「使用 Sampler Instrument 工 具分析數據部分(Analyzing Data with the Sampler Instrument)」。

8.10.4進程(Process)

Process instrument 工具記錄由另外進程派生的進程。該 Instrument 工具能夠 運行在單個進程或系統全部當前運行的進程之上。該 instrument 工具的實現使用了 DTrace,並能夠導入 DTrace 腳本。

該 instrument 工具捕獲如下信息:

  •  執行一個進程(execve)

  •  進程退出(exit)

    Process instrument 工具返回這些函數每次調用的信息,包括:

  •  函數名稱(execve或exit)

  •  函數調用者(包括可執行文件名稱,路徑,和棧跟蹤信息)

  •  進程ID

  •  進程退出狀態

      跟蹤面板能夠被設置來顯示如下任何數據:
    
  •  棧深度(Stack depth)

  •  線程 ID(Thread ID)

  •  進程 ID(Process ID)

  •  退出狀態(Exit status)

    對於任何調用,你能夠打開擴展詳細面板來查看該調用的棧跟蹤,和任何可用的 探針信息和事件發生的具體時間。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [98]

Instruments User Guide

page104image920

8.10.5網絡活動監控器(Network Activity Monitor)

Network Activity Monitor instrument 工具記錄電腦網絡傳輸信息。該 instrument 工具能夠運行在單個進程或系統當前全部運行的進程之上。

跟蹤面板能夠被設置來默認顯示如下網絡相關的數據,但你也能夠配置它來顯示 其餘類型的數據。默認狀況下,它顯示如下信息:
每秒發送的字節數量
每秒收接收字節的數量
每秒發送包的數量
每秒接收包的數量

8.10.6內存監控器(Memory Monitor)

Memory Monitor instrument 工具記錄進程使用的實際內存和虛擬內存的數量。 該 instrument 工具能夠運行在單個進程或系統全部當前運行的進程之上。

跟蹤面板能夠被設置來默認顯示如下內存相關的數據,但你也能夠配置它來顯示 其餘類型的數據。默認狀況下,它顯示如下的信息:
虛擬內存頁面交換進入的數量(virtual memory page ins)
虛擬內存頁面交換出去的數量(virtual memory page outs)
正在使用的虛擬內存空間的總數量
空閒物理內存的總數量
已用物理內存的總數量

8.10.7硬盤監控器(Disk Monitor)

Disk Monitor instrument 工具記錄硬盤的讀取和寫入操做。該 instrument 工具 能夠運行在單個進程或系統全部當前運行的進程之上。

跟蹤面板能夠被設置來默認顯示如下和硬盤相關的數據,但你也能夠配置它來顯 示其餘類型的數據。默認狀況下,它顯示如下信息:
每秒寫入硬盤的字節數量
每秒從硬盤讀取的字節數量
每秒處理的寫操做的數量

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [99]

Instruments User Guide

page105image920

每秒處理的讀操做的數量 8.10.8CPU監控器(CPU Monitor)

CPU Monitor instrument 工具記錄系統的負載。該 instrument 工具能夠運行在 單個進程或系統全部當前運行的進程之上。

跟蹤面板能夠被設置來默認顯示如下負載值,但你也能夠配置它來顯示其餘類型 的數據。默認狀況下,它顯示如下信息:
系統產生的負載的數量
用戶產生的負載的數量
系統總負載

8.10.9活動監控器(Activity Monitor)

Activity Monitor instrument 記錄由虛擬內存大小測量的系統負載。該 instrument 工具能夠運行在單個進程或系統全部當前運行的進程之上。

跟蹤面板能夠被設置來默認顯示如下的負載值,你也能夠配置它來顯示其餘類型 的數據。默認狀況下,它顯示如下信息:
正在使用的虛擬內存控件的總量
系統產生的負載數量
用戶產生的負載數量
系統總負載

8.11 Threads/Locks Instruments[線程相關] 如下 instruments 收集線程相關的數據。

8.11.1Java線程(Java Thread)

Java Thread instrument 工具記錄 Java 線程的初始化和銷燬。它顯示:

  •  每一個測量的時間

  •  總線程數

      你能夠指定特定顏色標示線程運行時,等待,和阻塞的狀態。
    

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [100]

Instruments User Guide

page106image920

8.12 UI Automation[界面自動化相關] 8.12.1使用Automation Instrument工具

Automation instrument 工具容許你讓 iOS 應用的用戶界面測試自動化。自動化 界面測試可讓你:

  •  省去關鍵人員和釋放其餘工做資源

  •  執行更多綜合測試

  •  開發可重複的迴歸測試

  •  減小程序錯誤

  •  提升開發週期,產品更新

    Automation instrument 工具由你的測試腳本指導,演示你應用的用戶界面元素, 容許你記錄分析結果。自動化功能能夠模擬許多用戶設備支持的用戶操做,好比 iOS4.0 或更高版本支持的多任務。你的測試腳本能夠運行在 iOS 設備和 iOS 模擬器 之上而不須要任何改動。

    Automation instrument 工具的一個最大的好處是能夠能夠和其餘 instruments 工具一塊兒執行復雜的測試,好比跟蹤內存泄露和隔離性能問題的緣由。 注意:爲了保護,該 instrument 工具不容許你處理任何和你證書不相關的進程。這包括拷 貝任何在 iTunes App Store 下載的應用。 重要:模擬動做可能沒法防止測試設備自動鎖定屏幕。因此在設備上運行測試以前,你應該 設置設備的 Auto-Lock 偏好設置爲 Never(設置->通用->自動鎖定->永不)。

    測試自動化腳本
    你以 JavaScript 腳本的方式編寫自動化測試,使用界面自動化 API 來指定在你

    程序運行中應該執行的動做。 使用腳原本實現主動化測試能夠減小開發和部署時間以及測試人員編程技巧的

    要求。此外,JavaScript 提供了複雜程序來支持複雜的操做。
    參閱 UI Automation Reference Collection 的 API 詳情。 你的測試腳本必須是一個本機 Instrument 應用能夠訪問的合法的可執行

    JavaScript 腳本文件。它在你的程序以外執行,因此你程序的測試版本能夠和你提

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [101]

Instruments User Guide

page107image936

交到 iTunes App Store 的版本相同。 你能夠建立任意多的腳本,可是你同一時間只能運行一個腳本。API 提供一個

#import 的指導,它運行你編寫較小,可重複使用的離散的測試腳本。好比,若是你

打算在一個文件裏定義通用的函數 TestUtilities.js,你能夠經過引入定義該函數

的腳本文件來使用這些函數。

#import 「<path-to-library-folder>TestUtilities.js」

加載Automation Instrument工具
加載 Automation instrument 工具和其餘內置的 instrument 工具備細微的不一樣。

如下是執行的步驟:

  1. 啓動Instrument應用。

  2. 選擇Automation模板來建立一個跟蹤文檔。(可選的,你能夠在Instrument應

    用的工具庫裏的 UI Automation 組找到 Automation instrument 工具,並拖動它

    到跟蹤文檔裏面)。

  3. 確保詳細視圖被顯示。(若是有必要選擇 View > Detail)

  4. 在Target菜單裏面選擇目標iOS設備,而後從iOS應用程序裏面列表選擇你的

    應用程序。

測試iOS模擬器裏面的應用
當選擇目標應用程序運行在 iOS 模擬器之上時,你可能須要經過導航欄裏面的

Choose Target 文件瀏覽器選擇目標應用程序,使用如下的本地路徑

iOS version>/Applications/ 並替換<iOS version>爲 iOS 實際版本號,好比圖 8-1 中的 4。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [102]

Instruments User Guide

page108image936

Figure 8-1 Targeting an application running in iOS Simulator

一旦選定了 iOS 模擬器上面的應用程序,有兩個加載項將會變得可用。

Process I/O:傳輸 I/O 消息到 Instruments 應用控制檯,系統控制檯,或 /dev/null。

Simulator Configuration:選擇目標硬件設備和 iOS 版本的組合。

運行Automation Instrument
爲了運行 Automation instrument 工具,執行如下步驟:

  1. 若是有必要單擊腳本的擴展三角形,顯示面板主體內容。

  2. 單擊 Choose Script。

  3. 在打開的面板裏面,找到腳本文件並打開它。

  4. 單擊Instruments工具欄的Record按鈕。腳本日誌條目將會出如今詳細面板裏

    面。

  5. 單擊擴展面板裏面的任何腳本日誌條目來在擴展詳細面板裏面顯示該條目的更

    多信息。

  6. 使用中止(stop)和開始(start)的控制按鈕來中止/暫停和開始/恢復你測試

    腳本序列的執行。

    爲了配置 Automation instrument 工具來自動化開始和中止你的腳本,能夠經過

控制 Instruments 應用工具欄的 Record 按鈕,選擇 Run on Record 的複選框。

page108image7552

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [103]

Instruments User Guide

page109image936

若是你的應用程序崩潰了或進入後臺,你的腳本將會被阻塞直到應用程序再次運 行在前臺,此時腳本繼續執行。

  要注意,你必須顯式的中止記錄。完成或中斷你的腳本都不會關閉記錄。

8.12.2訪問和操做用戶界面元素

UI Automation 特性下的基礎輔助機制(Accessibility-based)表明你應用程序 的每一個控制做爲一個獨特的可標示元素。爲了在你應用程序的元素上面執行操做,你 須要顯式的標識應用程序元素的層級結構。 注意:爲了徹底理解本部份內容,你應該熟悉 iOS 人機交互指南(iOS Human Interface Guidelines)。

爲了闡明元素的層級結構,本部分引用圖 8-2 所示的 Recipes iOS 應用(食譜應 用),該應用能夠在 iOS Dev Center 上面下載代碼示例 iPhoneCoreDataRecipes。

Figure 8-2 The Recipes application (Recipes screen)

page109image4728

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [104]

Instruments User Guide

page110image952

UI元素可訪問性
每一個可訪問的元素都是繼承自基礎元素 UIAElement。每一個元素均可以包含零個或

更多的其餘元素。
  以下文詳細介紹,你的腳本能夠訪問每一個獨立元素的在層級結構的位置。然而,

你能夠經過在設置 Interface Builder 的可訪問標籤來給每一個元素所表明的控件賦值 一個特定的名稱,如圖 8-3 所示。

Figure 8-3 Setting the accessibility label in Interface Builder

UI Automation 使用可訪問標籤(若是它設置的話)來爲每一個元素派生一個名字 屬性。除了顯而易見的好處,使用這樣的名稱能夠大大簡化你測試腳本的開發和維護。

  名稱屬性是這些元素在你測試腳本里面很是有用的四個屬性之一。
  •  名稱(name):派生自可訪問標籤

  •  值(value):當前控件的值,好比,文本域的文字

  •  子元素集(elements):當前元素所包含的任何子元素集,好比,列表視圖的單

    元格

  •  父元素(parent):包含當前元素的父元素

    理解元素的層級結構
    在元素層級結構的頂層是 UIATarget 類,它表明了被測系統(System under Test-

    SUT)高級用戶界面元素,即設備(或模擬器)和運行在你設備之上的 iOS 和你的應

    用程序。爲了測試,你的應用程序必須是前臺活躍程序(或目標程序),標識以下:

    UIATarget.localTarget().frontMostApp();

      爲了得到應用窗口,和你應用的主窗口,你應該指定
    

    ; 開始時,食譜應用程序窗口如圖 8-2 所示。

page110image7800

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [105]

Instruments User Guide

page111image1056

在窗口內部,食譜列表表明了一個獨立的視圖,此時是一個列表視圖(table view):

Figure 8-4 Recipes table view

它是你應用裏面列表視圖數組的第一個列表視圖,因此你使用下標 0 來指定它

([0]),以下:

UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0];

在列表視圖內部,每一個食譜由一個不一樣的單元格表示。你能夠以相似的方式指定

獨立的單元格。好比,使用下標 0([0]),你能夠指定第一個單元格以下:

UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[0];

這些獨立的單元格元素的每個都被設計做爲自定義子元素來包含一個食譜記 錄。在第一個單元格的記錄是 chocolate cake,你能夠使用下面的代碼來訪問它的 名稱:

顯示元素的層級結構
你能夠使用 logElementTree 方法來顯示每一個元素的全部子元素集。如下的代碼

舉例說明列出食譜應用的主界面的元素。
page111image5400

UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()[0].elements(

「Chocolate Cake」);

page111image7504 page111image7664 page111image7824 page111image8248 page111image8408 page111image8568 page111image8728 page111image8888
// List element hierarchy for the Recipes screen
page111image10040 page111image10200 page111image10360

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [106]

Instruments User Guide

page112image952
page112image1600 page112image2184 page112image2344
page112image3792
UIALogger.logStart("Logging element tree ...");
page112image5616
UIATarget.localTarget().logElementTree();
page112image7216 page112image7536
UIALogger.logPass();

該命令的輸出被 Automation instrument 工具捕獲並日志輸出,如圖 8-5 所示。

Figure 8-5 Output from logElementTree method

注意到每一個元素開始的行項目的數量,意味它元素的在層級結構的級別。這些級 別能夠被視爲概念圖,如圖 8-6 所示。

page112image10792

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [107]

Instruments User Guide

page113image936

Figure 8-6 Element hierarchy (Recipes screen)

儘管屏幕技術上不算是 iOS 編程序組件,並且沒有顯式的出如今層級結構,但它 對於理解層級界面很是有幫助。輕擊標籤欄的 Unit Converion 標籤顯示 Unit Conversion 的屏幕,如圖 8-7 所示。

page113image2808

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [108]

Instruments User Guide

page114image952

Figure 8-7 Recipes application (Unit Conversion screen)

如下代碼輕擊標籤欄的 Unit Conversion 標籤來顯示相關的屏幕,並打印相關的 每一個元素的層級結構日誌。

page114image2480
page114image3360 page114image3784 page114image4104
// Switch screen (mode) based on value of variable
page114image6120
page114image7440
var target = UIATarget.localTarget();
page114image9264
var app = target.frontMostApp();
page114image11152
var tabBar = app.mainWindow().tabBar();
page114image12968
page114image14288
var destinationScreen = "Recipes";
page114image15944
page114image17424
if (tabBar.selectedButton().name() != destinationScreen) {
page114image19288
tabBar.buttons()[destinationScreen].tap();
page114image21040

}

page114image22072

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [109]

Instruments User Guide

page115image968

由此產生的日誌輸出層級結構,如圖 8-8 所示。注意到和以前的例子相同, logElementTree 被目標調用,可是結果是當前屏幕,在該例中是 Unit Conversion 屏幕。

Figure 8-8 Element hierarchy (Unit Conversion screen)

page115image2720

指定元素層級結構導航 以前的例子代碼介紹了使用變量來代碼元素層級結構的部分。該技術能夠在你的

腳本中使用更短,更簡單的命令。 使用變量方式同時容許在你代碼中使用和重用的抽象和靈活性。如下示例使用變

量(destinationScreen)來控制食譜應用程序裏兩個屏幕間的切換(Recipes 和 Unit Conversion)。

page115image4912 page115image5496 page115image5656
// Switch screen (mode) based on value of variable
page115image7864
page115image9120
var target = UIATarget.localTarget();
page115image11008
var app = target.frontMostApp();
page115image12832
var tabBar = app.mainWindow().tabBar();
page115image14712
page115image15968
var destinationScreen = "Recipes";
page115image17848
page115image19104
if (tabBar.selectedButton().name() != destinationScreen) {
page115image21000
tabBar.buttons()[destinationScreen].tap();
page115image22752

}

page115image23784

使用輕微的改變,也可以使該代碼的代碼工做,好比,對於標籤工具欄包含多個標

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [110]

Instruments User Guide

page116image968

籤或不一樣名稱的標籤。

執行用戶界面手勢 一旦你懂得若是訪問所需的元素,那麼操縱相應的元素就會相對簡單和直接。UI

Automation API 接口提供了執行大部分 UIKit 用戶動做的方法,包括多點觸控手勢。 關於這些方法的全面詳細信息,參閱 UI Automation Reference Collection。

輕擊(Tapping)
或許最經常使用的觸摸手勢就是簡單的輕擊。在一個已知的 UI 元素上面實現單指輕

擊是很是簡單的。好比,輕擊食譜應用導航欄右邊的按鈕(圖中顯示+號),將會顯示 一個新的界面來添加一個新的食譜。

   輕擊該按鈕所需的命令爲:

UIATarget.localTarget().frontMostApp().navigationBar().buttons()["Add"].tap();

須要注意的是它使用了字符 Add 來標識該按鈕,假設已經設置了適當的輔助標籤, 如上所述。

固然,大部分複雜的手勢須要須要進行完全的測試。你能夠指定任何標準輕擊手

勢。好比,爲了輕擊屏幕上面任意地方,你只須要提供屏幕的座標:

UIATarget.localTarget().tap({x:100, y:200});

該命令輕擊有 x 和 y 指定的座標,而無論屏幕上該地方是什麼。

  一樣能夠執行更復雜的輕擊動做。爲了雙擊同一個地方,你能夠使用如下代碼:

UIATarget.localTarget().doubleTap({x:100, y:200});

  好比,執行測試兩個手指捏合放大和縮小動做,你能夠使用以下代碼:

UIATarget.localTarget().twoFingerTap({x:100, y:200});

捏(Pinching) 捏開動做一般用於放大或擴展屏幕的對象,而相應的捏合動做一般是縮小屏幕對

象。你須要指定定義捏合開始座標或捏開的結束座標,而後跟着手勢須要執行的時間 長度。時長參數容許你靈活指定捏動做的速度。

page116image7696

UIATarget.localTarget().pinchOpenFromToForDuration(({x:20, y:200}, {x:300, y:200}, 2);

UIATarget.localTarget().pinchCloseFromToForDuration(({x:20, y:200}, {x:300, y:200}, 2);

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [111]

Instruments User Guide

page117image992

拖拽和輕彈(Dragging and Flicking) 若是你須要滾動一個列表或移動一個屏幕的元素,你能夠使用

dragFromToForDuration 方法。你提供開始點的座標和結束點的座標,還有一個時長

(以秒爲單位)。如下例子指定了一個拖到手勢從點 160,200 到點 160,400,時長爲 1

秒。

UIATarget.localTarget().dragFromToForDuration(({x:160, y:200}, {x:160, y:400}, 1);

輕彈手勢有點相似,但它一般是一個更快的動做,因此它通常不須要時長的元素。

UIATarget.localTarget().flickFromTo(({x:160, y:200}, {x:160, y:400});

輸入文字 你的腳本有可能須要測試應用處理文本輸入是否正確。爲此,能夠經過簡單的指

定一個目標文本域並使用 setValue 來設置它的文本值來輸入文本到特定的文本域裏 面。下面的例子使用了一個本地變量來提供一個長字符串做爲當前屏幕第一個文本域 (下標爲[0])的測試案例。

導航應用中標籤 爲了測試你應用屏幕之間的導航,你有可能須要輕擊一個標籤工具欄的標籤。輕

擊一個標籤和輕擊一個按鈕相似;你訪問合適的標籤工具欄,指定所需的按鈕,而後 輕擊該按鈕,以下面例子那樣。

首先,一個本地變量被聲明來表示一個工具欄。腳本使用該變量訪問工具欄來確 定當前所選擇的標籤並獲取標籤的名稱。最後,若是當前選中的標籤的名稱和想要的 標籤不匹配(該例中爲」Unit Conversion」),腳本輕擊所需的標籤。

滾動元素
滾動是許多應用用戶交互的一個大部分。UI Automation 提供了一系列滾動的方

法。基礎的方法容許滾動到下一個元素的左,右,上和下。大部分複雜的方法支持更

page117image7304

var recipeName = "Unusually Long Name for a Recipe";

page117image8232

UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0].setValue(recipeNam

page117image8840

e);

var tabBar = UIATarget.localTarget().frontMostApp().mainWindow().tabBar();

var selectedTabName = tabBar.selectedButton().name();

if (selectedTabName != "Unit Conversion") {

tabBar.buttons()["Unit Conversion"].tap();

}

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [112]

Instruments User Guide

page118image944

靈活的在滾動中指定動做。其中之一好比 scrollToElementWithPredicate,它容許你 滾動一個元素到你指定的區域。下面的例子經過元素層級結構訪問合適的列表視圖, 並滾動它到以配方名爲」Turtle Pie」開始的單元格。

使用 scrollToElementWithPredicate 方法容許滾動到一個可能不知道確切名稱 的元素。

使用謂詞的功能能夠顯著的擴展你腳本的能力和適用性。關於使用謂詞的更多信 息,參見 Predicate programming Guide(謂詞編程指南)。

其餘靈活滾動的有用方法包括 scrollToElementWithName 和 scrollToElementWithValueForKey。參見 UIAScrollView Class Reference 更多信息。

8.12.3 添加靈活的超時間

你的腳本可能須要等待某些動做完成。好比在食譜應用程序中,用戶經過點擊 Recipes 標籤從 Unit Conversion 屏幕返回到 Recipes 屏幕。然而,UI Automation 可能檢測到存在 Add 按鈕,嘗試使用測試腳本在按鈕被真正繪畫以前企圖點擊它,而 且應用實際上已經準備好接收該點擊事件。須要執行一個精確的測試來保證 Recipes 屏幕徹底繪畫完並且應用程序在屏幕控制操做以前已經準備好接收用戶的交互。

爲了讓這些狀況更靈活並且更好的控制時間,UI Automation 提供了超時週期, 在此週期內它會在失效以前重複的嘗試執行指定的動做。若是動做在超時週期內完 成,該行代碼返回,而且你的腳本能夠處理它。若是動做未在超時以前完成,將會拋 出異常。默認的超時週期是 5 秒,可是你的腳本能夠能夠改變它爲任什麼時候間值。

爲了讓該特性更好用,UI Automation 使用了棧模型。你推入一個自定義超時周

期到棧頂,以下面的代碼,它把超時時間縮短爲 2 秒。

UIATarget.localTarget().pushTimeout(2);

  你能夠運行下面的代碼來執行動做和把自定義超時時間推出棧。

UIATarget.localTarget().popTimeout();

使用該方法你能夠建立一個強大的腳本,它能夠在一個合理的時間內等於某一事 件的發生。

注意:經管一般不推薦使用顯式的遲延,但在某些時候可能必須使用。如下的代碼顯示瞭如

UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].scrollToElementWit

hPredicate("name beginswith ‘Turtle Pie’");

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [113]

Instruments User Guide

page119image960

何指定一個 2 秒的遲延:UIATarget.localTarget().delay(2); 8.12.4 驗證測試結果

測試的關鍵是可以驗證每一個測試已執行的,並且知道測試經過仍是失敗。下面的 示例代碼運行測試腳本 testName 來測試目前食譜列表上面現有的合法的食譜元素的 名稱是否以「Tarte」開頭。首先,使用一個本地變量來指定單元格標準:

其次,腳本使用 isValid 的方法來測試一個現有合法的元素是否匹配這些標準。

page119image3400 page119image3824 page119image3984

var cell = UIATarget.localTarget().frontMostApp().mainWindow().tableViews()[0].cells()

page119image6016 page119image6176
.firstWithPredicate("name beginswith ‘Tarte’");
page119image7128
page119image8280 page119image8704 page119image8864
if (cell.isValid()) {
page119image10680
UIALogger.logPass(testName);
page119image12544

}

page119image14312

else {

page119image16056
UIALogger.logFail(testName);
page119image17808 page119image17968

}

page119image18840

若是發現一個合法的單元格,代碼會輸出一個經過的日子消息,反之,會輸出一 個失敗消息。

須要注意的是,該測試腳本指定 firstWithPredicate 和」name beginsWith’Tarte’」。這些準則已經適用於 Tarte aux Fraises 單元格上,它在 已經 Recipes 示例應用中出來默認數據。然而,若是一個用戶給 Tarte aux Framboises 添加一條食譜,例子可能能夠或不可能給出預想的結果。

8.12.5 輸出測試結果和數據的日子

你的腳本報告日誌信息給 Automation instrument 工具,而 instrument 工具收 集並報告給你分析結果。

當編寫你測試腳本時,若是爲了幫你診斷出現的任何故障的地方,你應該儘量 的輸出更多的信息。最低限度是當每一個腳本開始和結束,肯定測試執行,並記錄經過 和失敗狀態時,你應該輸出日誌。這種最小記錄在 UI 自動化的自動完成的。你只需 要簡單的使用你的測試腳本的名稱來調用 logStart,運行你的測試腳本,而後合適 的時候調用 logPass 或者 logFail,以下面的代碼那樣。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [114]

Instruments User Guide

page120image944
page120image1600 page120image2184 page120image2344
var testName = "Module 001 Test";
page120image4440
UIALogger.logStart(testName);
page120image6144
//some test code
page120image7816 page120image8136
UIALogger.logPass(testName);
page120image9008

可是當你的腳本和控制器交互的時候,輸出所發生的事情是一個很好的作法。無 論你是驗證應用程序的部分是否正確執行,或在追查 Bug 信息,很難想象若是有太多 日誌信息須要分析。爲了不這樣,你能夠使用 logMessage 來輸出任何發生的地方, 並且你甚至能夠補充文本數據和截屏。

  如下的示例代碼擴展以前的輸出,包括一個自由的日誌輸出信息和一個截屏。

var testName = "Module 001 Test";

UIALogger.logStart(testName);

//some test code

UIALogger.logMessage("Starting Module 001 branch 2, validating input.");

//capture a screenshot with a specified name

UIATarget.localTarget().captureScreenWithName("SS001-2_AddedIngredient");

//more test code

UIALogger.logPass(testName);

在示例代碼裏面的截屏將會被指定文件名爲 SS001-2_AddedIngredient 保存到 Instruments 應用裏面。
注意:當前在 iOS 模擬器上不支持截屏功能。然而,若是你試圖使用截屏功能,簡化在日誌 裏面輸出一個失敗的信息。

8.12.6處理警告

除了驗證你的應用警告是否工做正常,你的測試腳本應該包含測試在應用以外出 現非預期的警告。好比,在檢查天氣或玩遊戲的時候一般不該該出現文本信息。更糟 糕的是,一個電話銷售自動撥號能夠獲取你的電話號碼就像你啓動你的腳本那樣。

處理外部產生的警告 儘管看起來可能有些自相矛盾,你的應用程序和你的測試應該期待你的應用程序

運行時會發生意想不到的警報。幸運的是,UI Automation 包含了一個默認的警告處 理程序,它可讓你的腳本很容易顯示外部產生的警告。你的腳本提供一個名爲 onAlert 的警告處理函數,它會在警告產生的時候被調用,此時它會採起相應的措施, 而後簡單的返回警告給默認處理程序隱藏它。 2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [115]

Instruments User Guide

page121image944
  如下示例代碼舉例說了一個很是簡單的警告例子。

該處理程序所作的事情是輸出一個警告發生的類型的消息而後返回 False。返回 錯誤能夠指導 UI Automation 的默認警告處理程序隱藏它。例如,在警告顯示一個收 到的文本消息時,UI Automation 簡單的單擊關閉按鈕。 注意:默認處理程序達到警告的上限數量時將會中止隱藏新進的警告。在不太可能發生的情 況下,你的測試達到此上限,你應該檢查你的測試環境和程序找出可能出現的問題。

處理內部產生的警告 做爲你應用的一部分,你有可能須要處理一些警告。在這些狀況下,你的警告處

理程序可能須要執行相應的響應並返回 True 給默認處理程序,告知該警告已經被處 理。

下面的例子代碼簡單的擴展了基本警告處理程序。在輸出該警告類型後,它測試 警告是不是預期的。若是是,它單擊 Continue 按鈕,並返回 Ture 來跳過默認隱藏動 做。

UIATarget.onAlert = function onAlert(alert) {

var title = alert.name();

UIALogger.logWarning("Alert with title '" + title + "' encountered.");

// return false to use the default handler

return false;

}

UIATarget.onAlert = function onAlert(alert) {

var title = alert.name();

UIALogger.logWarning("Alert with title '" + title + "' encountered.");

if (title == "The Alert We Expected") {

alert.buttons()["Continue"].tap();

return true; //alert handled, so bypass the default handler

}

// return false to use the default handle r

return false;

}

該基礎警告處理程序儘量簡單,在容許你的腳本繼續運行時,它一般能夠響應 任何收到的警告。

8.12.7 檢測和指定設備的方向
一個好的 iOS 應用應該在設備方向改變的時候作相應的調整,因此你的腳本應該

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [116]

Instruments User Guide

page122image944

能夠預知並測試這些改變。
UI Automation 工具提供了 setDeviceOrientation 方法來模擬一個設備方向的改

變。該方法使用了列表 8-1 中的常量。

注意:至於設備方向的處理,該功能徹底由軟件來模擬。硬件特性好比原始加速度計數據無 法使用 UI Automation 特性並且不受它影響。

Table 8-1 Device orientation constants

page122image5232 page122image5656 page122image6296 page122image6720

Orientation constant

Description

page122image8408 page122image8568 page122image8728 page122image9208 page122image9368

The orientation of the device cannot be

UIA_DEVICE_ORIENTATION_UNKNOWN

page122image10984

determined.

page122image11752 page122image11912 page122image12072 page122image12552 page122image12712

The device is in portrait mode, with the device

UIA_DEVICE_ORIENTATION_PORTRAIT

page122image14408

upright and the home button at the bottom.

page122image15456 page122image15616 page122image15776 page122image16256 page122image16416

The device is in portrait mode but upside down, with the device upright and the home button at

UIA_DEVICE_ORIENTATION_PORTRAIT_UPSIDEDOWN

page122image18576

the top.

page122image19384 page122image19544 page122image19704 page122image20184 page122image20344

The device is in landscape mode, with the device upright and the home button on the right

UIA_DEVICE_ORIENTATION_LANDSCAPELEFT

page122image22464

side.

page122image23232 page122image23552 page122image23712 page122image24032 page122image24192

The device is in landscape mode, with the device upright and the home button on the left

UIA_DEVICE_ORIENTATION_LANDSCAPERIGHT

page122image26312

side.

page122image27080 page122image27400 page122image27560 page122image27880 page122image28040

The device is parallel to the ground with the

UIA_DEVICE_ORIENTATION_FACEUP

page122image29736

screen facing upward.

page122image30584 page122image30744 page122image30904 page122image31648 page122image31808 page122image31968

The device is parallel to the ground with the

UIA_DEVICE_ORIENTATION_FACEDOWN

page122image33768

screen facing downward.

與設備方向相反的是界面方向,它表明了你的應用界面在設備方向改變時所須要 的旋轉。須要注意的是在橫屏模式下,設備方向和界面方向是相反的,由於旋轉設備 須要以相反的方向旋轉內容。

UI Automation 提供了 interfaceOrientation 方法來獲取當前界面方向。該方法 使用了列表 8-2 列舉的常量。

Orientation constant

UIA_INTERFACE_ORIENTATION_PORTRAIT

Table 8-2 Interface orientation constants

page122image38832 page122image40056 page122image40480

Description

page122image41680 page122image41840 page122image42000 page122image42480 page122image42640

The interface is in portrait mode, with the

page122image43848

bottom closest to the home button.

page122image44816 page122image45136 page122image45296 page122image45616 page122image45936

The interface is in portrait mode but upside down, with the top closest to the home

UIA_INTERFACE_ORIENTATION_PORTRAIT_UPSIDEDOWN

page122image47856

button.

page122image48464 page122image48624 page122image49368 page122image49688

The interface is in landscape mode, with

UIA_INTERFACE_ORIENTATION_LANDSCAPELEFT

page122image51832

the left side closest to the home button.

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [117]

Instruments User Guide

page123image952

UIA_INTERFACE_ORIENTATION_LANDSCAPERIGHT

page123image3320 page123image4168 page123image4328

The interface is in landscape mode, with

page123image5440

the right side closest to the home button.

下面的示例代碼改變設備的方向(該例中,修改維橫屏先左),而後把方向修改 爲原來方向(豎屏)。

var target = UIATarget.localTarget();

var app = target.frontMostApp();

//set orientation to landscape left

target.setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT);

UIALogger.logMessage("Current orientation now " + app.interfaceOrientation());

//reset orientation to portrait

target.setDeviceOrientation(UIA_DEVICE_ORIENTATION_PORTRAIT);

UIALogger.logMessage("Current orientation now " + app.interfaceOrientation());

固然,一旦你修改了方向,最後你須要把方向修改回來。 當執行了一個包含改變設備方向的測試時,最好的作法是在開始測試以前設置設

備的方向,而後在測試完成的時候把方向設置回來。這樣能夠保證你的腳本返回到已 知狀態。

你有可能已經注意到了示例代碼中輸出的方向信息。這些日誌輸出給你的測試腳 本和測試人員提供了額外的驗證,確保它們不迷失方向。

8.12.8 測試多任務

當用戶點擊 Home 按鈕退出你應用的時候,或促使其餘應用進入前臺時,你的應 用將會被暫停。爲了模擬這種情形,UI Automation 提供了 deactivateAppForDuration 方法。你只須要調用該方法,並指定一個時長(以秒爲單位),這樣你的應用就能夠

被暫停,以下面的代碼那樣。

UIATarget.localTarget().deactivateAppForDuration(10);

這樣簡單的一行代碼能夠促使你的應用被暫停 10 秒鐘,和用戶點擊了退出按鈕 並且 10 秒後返回應用的效果同樣。

8.13 User Interface Instruments[用戶界面相關] 如下的 instruments 工具爲應用層事件收集數據。

8.13.1Cocoa事件(Cocoa Events)
Cocoa Events instrument 工具記錄經過 NSApplication 類 sendEvent:方法發送

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [118]

Instruments User Guide

page124image920

事件。該方法是分配事件給 Cocoa 應用的主要方法。你能夠使用該 instrument 工具 來把應用程序事件和其餘應用程序行爲關聯起來,好比內存和 CPU 佔有率等。該 instrument 工具運行在當個進程之上。它的實現使用了 DTrace 技術,而且能夠導入 DTrace 腳本。

該 instrument 工具捕獲被髮送事件的類型。

  跟蹤面板能夠被設置來顯示如下任何數據信息:
  •  棧深度(Stack depth)

  •  線程 ID(Thread ID)

  •  事件種類(The Event Kind)

    對於任何調用,你能夠打開擴展詳細面板來查看該調用的棧跟蹤,和具體發生的 時間。

    8.13.2Carbon事件(Carbon Events)

    Carbon Events instrument 工具記錄由 Carbon Event Manager 裏面的函數 WaitNextEvent 返回的事件。你能夠使用該 instrument 來把應用的事件和其餘應用 的行爲關聯起來,好比內存和 CPU 佔用率等。該 instrument 工具運行在單個進程之 上。它的實現使用了 DTrace 技術,並能夠導入 DTrace 腳本。

    該 instrument 工具捕獲發送事件的類型。

      跟蹤面板能夠被設置來顯示如下數據信息:
    
    •  棧深度(Stack depth)

    •  線程 ID(Thread ID)

    •  事件種類(The Event Kind)

      對於任何調用,你能夠打開擴展詳細面板來查看該調用的棧跟蹤,和具體發生的 時間。

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [119]

Instruments User Guide

page125image928

結束語

或許不少人對 Instruments 應用不太瞭解,但可能不少老的 iOS 開發者都應該用過 Instruments 工具來檢測 iOS 應用內存泄漏狀況。特別是在 iOS 5.0 以前,即蘋果在 iOS 平臺上面還沒支持 ARC 的時候,寫 iOS 應用就相似 C 語言那樣,容易忘記釋放內存, 而內存對移動設備而言是很是難得的。即便目前 iPhone 設備內存已經基本都知足 512MB 了,可是由於蘋果的後臺模式是把整個應用封裝起來等待下次啓用,因此該 應用所佔用的內存一樣被佔據了。也就是即便應用進入後臺模式,它仍是仍然佔用原 先的內存的,因此你打開的應用越多,內存耗用天然也不少。對不少普通用戶而言, 每每他們打開的應用都是進入後臺模式的,不多有用戶清理後臺的應用,因此也就造 成不少應用其實可用內存仍是很是有限地 (題外話:若是蘋果原生支持一鍵清理後 臺程序就行了,貌似越獄的工具裏面有這樣的支持的)。

還有作過 iOS 應用自動化測試的開發者,應該對 UIAutomation 很熟悉吧。對, 它就是經過 JS 腳原本寫界面自動化測試用例。而 Instruments 應用對 UIAutomation 支持很完善,你能夠經過它查看不少代碼潛在的問題,並測試性能。

其實 Instruments 應用還有不少強大的功能,它原生支持不少 instrument 工具,幫 助你分析你的代碼,不只包括內存檢測和自動化測試,它還能夠監測文件讀寫操做等 等待。因此一個好的 iOS 開發者是應該掌握 Instrument 應用的使用。由於 Instruments 應用自己功能太強大的,因此徹底掌握機會不可能,可是由於它們內置的不少工具具 有類似性,因此你基本掌握本身經常使用的便可。同時瞭解一下內部有哪些功能,這樣在 你須要用到的時候再查查文檔,就能夠很快上手了。

最後,本文在翻譯過程當中發現不少地方直譯成中文比較晦澀,因此採用了意譯的 方式,這不可避免的形成有一些地方可能和原文有必定的出入,因此若是你閱讀的時

候發現有任何的錯誤均可以給我發郵件:xyl.layne@gmail.com。 最後能夠關注我微博你們一塊兒溝通交流學習。

微博地址: http://weibo.com/u/1826448972

page125image7264

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [120]

Instruments User Guide

page126image944

推薦資源

核心動畫編程指南【Core Animation Programming Guide】 下載地址:

http://www.cocoachina.com/bbs/read.php?tid=84461

Blocks 編程要點【Blocks Programming Topics】 下載地址:

http://www.cocoachina.com/bbs/read.php?tid=87593

多線程編程指南【Threading Programming Guide】 下載地址:

http://www.cocoachina.com/bbs/read.php?tid=87592

本地和推送通知編程指南【Local and Push Notification Programming Guide】

下載地址:【近期推出,敬請關注微博動態】

page126image4816 page126image4976 page126image5136

2011-12-07 | © 2011 YouMi Mobile Co. Ltd. All Rights Reserved. [121] 

相關文章
相關標籤/搜索