blob: 6abf9d5614e6a031abea58575acef31dedef14f8 [file] [log] [blame]
Ted Kremenek0f399962010-02-19 08:14:02 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
5 <title>Build and Analyze: running the analyzer within Xcode</title>
6 <link type="text/css" rel="stylesheet" href="content.css" />
7 <link type="text/css" rel="stylesheet" href="menu.css" />
8 <script type="text/javascript" src="scripts/menu.js"></script>
9 <script type="text/javascript" src="scripts/dbtree.js"></script>
10</head>
11<body>
12
13<div id="page">
14<!--#include virtual="menu.html.incl"-->
15<div id="content">
16
17<h1>Build and Analyze: running the analyzer within Xcode</h1>
18
19<table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0">
20<tr><td>
21
22<h3>What is it?</h3>
23<p><i>Build and Analyze</i> is an Xcode feature (introduced in Xcode 3.2) that
24allows users to run the Clang Static Analyzer <a
25href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html">directly
26within Xcode</a>.</p>
27
28<p>It integrates directly with the Xcode build system and
29presents analysis results directly within Xcode's editor.</p>
30
31<h3>Can I use the open source analyzer builds with Xcode?</h3>
32
33<p><b>Yes</b>. Instructions are included below.</p>
34
35</td>
36<td style="padding-left:10px">
37<center>
38 <a href="images/analyzer_html.png"><img src="images/analyzer_xcode.png" width="620px" border=0></a>
39<br><b>Viewing static analyzer results in Xcode</b></center>
40</td></tr></table>
41
42<!-->
43<h3>Key features:</h3>
44<ul>
45 <li><b>Integrated workflow:</b> Results are integrated within Xcode. There is
46 no experience of using a separate tool, and activating the analyzer requires a
47 single keystroke or mouse click.</li>
48 <li><b>Transparency:</b> Works effortlessly with Xcode projects (including iPhone projects).
49 <li><b>Cons:</b> Doesn't work well with non-Xcode projects. For those,
50 consider using <a href="scan-build.html"><b>scan-build</b></a>.
51</ul>
52-->
53
54<h2>Getting Started</h2>
55
56<p>Xcode 3.2 is available as a free download from Apple, with <a
57href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html">instructions available</a>
58for using <i>Build and Analyze</i>.</p>
59
60<h2>Using open source analyzer builds with <i>Build and Analyze</i></h2>
61
62<p>By default, Xcode uses the version of <tt>clang</tt> that came bundled with
63it to provide the results for <i>Build and Analyze</i>. It is possible to change
64Xcode's behavior to use an alternate version of <tt>clang</tt> for this purpose
65while continuing to use the <tt>clang</tt> that came with Xcode for compiling
66projects.</p>
67
68<h3>Why try open source builds?</h3>
69
70<p>The advantage of using open source analyzer builds (provided on this website)
71is that they are often newer than the analyzer provided with Xcode, and thus can
72contain bug fixes, new checks, or simply better analysis.</p>
73
74<p>On the other hand, new checks can be experimental, with results of variable
75quality. Users are encouraged to <a href="filing_bugs.html">file bug reports</a>
76(for any version of the analyzer) where they encounter false positives or other
77issues.</p>
78
79<h3>set-xcode-analyzer</h3>
80
81<p>Starting with analyzer build checker-234, analyzer builds contain a command
82line utility called <tt>set-xcode-analyzer</tt> that allows users to change what
83copy of <tt>clang</tt> that Xcode uses for <i>Build and Analyze</i>:</p>
84
85<pre class="code_example">
86$ <b>set-xcode-analyzer -h</b>
87Usage: set-xcode-analyzer [options]
88
89Options:
90 -h, --help show this help message and exit
91 --use-checker-build=PATH
92 Use the Clang located at the provided absolute path,
93 e.g. /Users/foo/checker-1
94 --use-xcode-clang Use the Clang bundled with Xcode
95</pre>
96
97<p>Operationally, <b>set-xcode-analyzer</b> edits Xcode's configuration files
98(in <tt>/Developer</tt>) to point it to use the version of <tt>clang</tt> you
99specify for static analysis. Within this model it provides you two basic modes:</p>
100
101<ul>
102 <li><b>--use-xcode-clang</b>: Switch Xcode (back) to using the <tt>clang</tt> that came bundled with it for static analysis.</li>
103 <li><b>--use-checker-build</b>: Switch Xcode to using the <tt>clang</tt> provided by the specified analyzer build.</li>
104</ul>
105
106<h4>Examples</h4>
107
108<p>Telling Xcode to use checker-235 for <i>Build and Analyze</i>:</p>
109
110<pre class="code_example">
111$ pwd
112/tmp
113$ tar xjf checker-235.tar.bz2
114$ checker-235/set-xcode-analyzer --use-checker-build=/tmp/checker-235
115</pre>
116
117<p>Telling Xcode to use a very specific version of <tt>clang</tt>:</p>
118
119<pre class="code_example">
120$ set-xcode-analyzer --use-checker-build=~/mycrazyclangbuild/bin/clang
121</pre>
122
123<p>Resetting Xcode to its default behavior:</p>
124
125<pre class="code_example">
126$ set-xcode-analyzer -use-xcode-clang
127</pre>
128
129</div>
130</div>
131</body>
132</html>
133