diff options
-rw-r--r-- | www/analyzer/content.css | 18 | ||||
-rw-r--r-- | www/analyzer/menu.html.incl | 7 | ||||
-rw-r--r-- | www/analyzer/scan-build.html | 105 | ||||
-rw-r--r-- | www/analyzer/xcode.html | 133 |
4 files changed, 240 insertions, 23 deletions
diff --git a/www/analyzer/content.css b/www/analyzer/content.css index 823fae265c..b22cca9ff5 100644 --- a/www/analyzer/content.css +++ b/www/analyzer/content.css @@ -47,6 +47,21 @@ IMG.img_slide { /* Tables */ tr { vertical-align:top } +table.options thead { + background-color:#eee; color:#666666; + font-weight: bold; cursor: default; + text-align:left; + border-top: 2px solid #cccccc; + border-bottom: 2px solid #cccccc; + font-weight: bold; font-family: Verdana +} +table.options { border: 1px #cccccc solid } +table.options { border-collapse: collapse; border-spacing: 0px } +table.options { margin-left:0px; margin-top:20px; margin-bottom:20px } +table.options td { border-bottom: 1px #cccccc dotted } +table.options td { padding:5px; padding-left:8px; padding-right:8px } +table.options td { text-align:left; font-size:9pt } + /* Collapsing Trees: http://dbtree.megalingo.com/web/demo/simple-collapsible-tree.cfm */ #collapsetree, #collapsetree a:link, #collapsetree li a:link, #collapsetree a:visited, #collapsetree li a:visited{color:#000;text-decoration:none} #collapsetree,#collapsetree ul{list-style-type:none; width:auto; margin:0; padding:0} @@ -60,4 +75,5 @@ tr { vertical-align:top } #collapsetree ul li.click a{background:url(images/tree/bullet.gif) center left no-repeat} #collapsetree li a.subMenu,#collapsetree ul li a.subMenu{background:url(images/tree/plus.gif) center left no-repeat} #collapsetree li a.click{background:url(images/tree/minus.gif) center left no-repeat} -#collapsetree ul li a.click{background:url(images/tree/minus.gif) center left no-repeat}
\ No newline at end of file +#collapsetree ul li a.click{background:url(images/tree/minus.gif) center left no-repeat} + diff --git a/www/analyzer/menu.html.incl b/www/analyzer/menu.html.incl index 8d465e44c2..8d218f7a76 100644 --- a/www/analyzer/menu.html.incl +++ b/www/analyzer/menu.html.incl @@ -16,7 +16,12 @@ User Manual <ul> <li><a href="/installation.html">Obtaining the Analyzer</a></li> - <li><a href="/scan-build.html">Running the Analyzer</tt></a></li> + <li>Running the Analyzer + <ul> + <li><a href="/scan-build.html">Command line usage</a></li> + <li><a href="/xcode.html">Within Xcode</a></li> + </ul> + </li> <li><a href="/available_checks.html">Available Checks</a></li> <li><a href="/annotations.html">Source-level Annotations</a></li> </ul> diff --git a/www/analyzer/scan-build.html b/www/analyzer/scan-build.html index 122c61587f..eeff706ff2 100644 --- a/www/analyzer/scan-build.html +++ b/www/analyzer/scan-build.html @@ -5,7 +5,8 @@ <title>scan-build: running the analyzer from the command line</title> <link type="text/css" rel="stylesheet" href="content.css" /> <link type="text/css" rel="stylesheet" href="menu.css" /> - <script type="text/javascript" src="scripts/menu.js"></script> + <script type="text/javascript" src="scripts/menu.js"></script> + <script type="text/javascript" src="scripts/dbtree.js"></script> </head> <body> @@ -13,23 +14,6 @@ <!--#include virtual="menu.html.incl"--> <div id="content"> -<style> -table.options thead { - background-color:#eee; color:#666666; - font-weight: bold; cursor: default; - text-align:left; - border-top: 2px solid #cccccc; - border-bottom: 2px solid #cccccc; - font-weight: bold; font-family: Verdana -} -table.options { border: 1px #cccccc solid } -table.options { border-collapse: collapse; border-spacing: 0px } -table.options { margin-left:0px; margin-top:20px; margin-bottom:20px } -table.options td { border-bottom: 1px #cccccc dotted } -table.options td { padding:5px; padding-left:8px; padding-right:8px } -table.options td { text-align:left; font-size:9pt } -</style> - <h1>scan-build: running the analyzer from the command line</h1> <table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0"> @@ -70,19 +54,22 @@ aforementioned hack fails to work.</p> <h2>Contents</h2> -<ul> -<li><a href="#scanbuild">Getting Started</a></li> +<ul id="collapsetree" class="dbtree onclick multiple"> +<li><a href="#scanbuild">Getting Started</a> <ul> <li><a href="#scanbuild_basicusage">Basic Usage</a></li> <li><a href="#scanbuild_otheroptions">Other Options</a></li> <li><a href="#scanbuild_output">Output of scan-build</a></li> </ul> -<li><a href="#recommendedguidelines">Recommended Usage Guidelines</a></li> +</li> +<li><a href="#recommendedguidelines">Recommended Usage Guidelines</a> <ul> <li><a href="#recommended_debug">Always Analyze a Project in its "Debug" Configuration</a></li> <li><a href="#recommended_verbose">Use Verbose Output when Debugging scan-build</a></li> <li><a href="#recommended_autoconf">Run './configure' through scan-build</a></li> </ul> +</li> +<li><a href="#iphone">Analyzing iPhone Projects</a></li> </ul> <h2 id="scanbuild">Getting Started</h2> @@ -276,6 +263,82 @@ the arguments over to <tt>gcc</tt>, but this may not work perfectly (please report bugs of this kind). --> +<h2 id="iphone">Analyzing iPhone Projects</h2> + +<p>Conceptually Xcode projects for iPhone applications are nearly the same as +their cousins for desktop applications. <b>scan-build</b> can analyze these +projects as well, but users often encounter problems with just building their +iPhone projects from the command line because there are a few extra preparative +steps they need to take (e.g., setup code signing).</p> + +<h3>Recommendation: use "Build and Analyze"</h3> + +<p>The absolute easiest way to analyze iPhone projects is to use the <a +href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html"><i>Build +and Analyze</i> feature in Xcode 3.2</a> (which is based on the Clang Static +Analyzer). There a user can analyze their project with the click of a button +without most of the setup described later.</p> + +<p><a href="scan-build.html">Instructions are available</a> on this +website on how to use open source builds of the analyzer as a replacement for +the one bundled with Xcode.</p> + +<h3>Using scan-build directly</h3> + +<p>If you wish to use <b>scan-build</b> with your iPhone project, keep the +following things in mind:</p> + +<ul> + <li>Analyze your project in the <tt>Debug</tt> configuration, either by setting +this as your configuration with Xcode or by passing <tt>-configuration +Debug</tt> to <tt>xcodebuild</tt>.</li> + <li>Analyze your project using the <tt>Simulator</tt> as your base SDK. It is +possible to analyze your code when targetting the device, but this is much +easier to do when using Xcode's <i>Build and Analyze</i> feature.</li> + <li>Check that your code signing SDK is set to the simulator SDK as well, and make sure this option is set to <tt>Don't Code Sign</tt>.</li> +</ul> + +<p>Note that you can most of this without actually modifying your project. For +example, if your application targets iPhoneOS 2.2, you could run +<b>scan-build</b> in the following manner from the command line:</p> + +<pre class="code_example"> +$ scan-build xcodebuild -configuration Debug -sdk iphonesimulator2.2 +</pre> + +Alternatively, if your application targets iPhoneOS 3.0: + +<pre class="code_example"> +$ scan-build xcodebuild -configuration Debug -sdk iphonesimulator3.0 +</pre> + +<h3>Gotcha: using the right compiler</h3> + +<p>Recall that <b>scan-build</b> analyzes your project by using <tt>gcc</tt> to +compile the project and <tt>clang</tt> to analyze your project. When analyzing +iPhone projects, <b>scan-build</b> may pick the wrong compiler than the one +Xcode would use to build your project. This is because multiple versions of +<tt>gcc</tt> may be installed on your system, especially if you are developing +for the iPhone.</p> + +<p>Where this particularly might be a problem is if you are using Mac OS 10.5 +(Leopard) to develop for iPhone OS 3.0. The default desktop compiler on Leopard +is gcc-4.0, while the compiler for iPhone OS 3.0 is gcc-4.2. When compiling your +application to run on the simulator, it is important that <b>scan-build</b> +finds the correct version of <tt>gcc</tt>. Otherwise, you may see strange build +errors that only happen when you run <tt>scan-build</tt>. + +<p><b>scan-build</b> provides the <tt>--use-cc</tt> and <tt>--use-c++</tt> +options to hardwire which compiler scan-build should use for building your code. +Note that although you are chiefly interested in analyzing your project, keep in +mind that running the analyzer is intimately tied to the build, and not being +able to compile your code means it won't get fully analyzed (if at all).</p> + +<p>If you aren't certain which compiler Xcode uses to build your project, try +just running <tt>xcodebuild</tt> (without <b>scan-build</b>). You should see the +full path to the compiler that Xcode is using, and use that as an argument to +<tt>--use-cc</tt>.</p> + </div> </div> </body> diff --git a/www/analyzer/xcode.html b/www/analyzer/xcode.html new file mode 100644 index 0000000000..6abf9d5614 --- /dev/null +++ b/www/analyzer/xcode.html @@ -0,0 +1,133 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <title>Build and Analyze: running the analyzer within Xcode</title> + <link type="text/css" rel="stylesheet" href="content.css" /> + <link type="text/css" rel="stylesheet" href="menu.css" /> + <script type="text/javascript" src="scripts/menu.js"></script> + <script type="text/javascript" src="scripts/dbtree.js"></script> +</head> +<body> + +<div id="page"> +<!--#include virtual="menu.html.incl"--> +<div id="content"> + +<h1>Build and Analyze: running the analyzer within Xcode</h1> + +<table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0"> +<tr><td> + +<h3>What is it?</h3> +<p><i>Build and Analyze</i> is an Xcode feature (introduced in Xcode 3.2) that +allows users to run the Clang Static Analyzer <a +href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html">directly +within Xcode</a>.</p> + +<p>It integrates directly with the Xcode build system and +presents analysis results directly within Xcode's editor.</p> + +<h3>Can I use the open source analyzer builds with Xcode?</h3> + +<p><b>Yes</b>. Instructions are included below.</p> + +</td> +<td style="padding-left:10px"> +<center> + <a href="images/analyzer_html.png"><img src="images/analyzer_xcode.png" width="620px" border=0></a> +<br><b>Viewing static analyzer results in Xcode</b></center> +</td></tr></table> + +<!--> +<h3>Key features:</h3> +<ul> + <li><b>Integrated workflow:</b> Results are integrated within Xcode. There is + no experience of using a separate tool, and activating the analyzer requires a + single keystroke or mouse click.</li> + <li><b>Transparency:</b> Works effortlessly with Xcode projects (including iPhone projects). + <li><b>Cons:</b> Doesn't work well with non-Xcode projects. For those, + consider using <a href="scan-build.html"><b>scan-build</b></a>. +</ul> +--> + +<h2>Getting Started</h2> + +<p>Xcode 3.2 is available as a free download from Apple, with <a +href="http://developer.apple.com/mac/library/featuredarticles/StaticAnalysis/index.html">instructions available</a> +for using <i>Build and Analyze</i>.</p> + +<h2>Using open source analyzer builds with <i>Build and Analyze</i></h2> + +<p>By default, Xcode uses the version of <tt>clang</tt> that came bundled with +it to provide the results for <i>Build and Analyze</i>. It is possible to change +Xcode's behavior to use an alternate version of <tt>clang</tt> for this purpose +while continuing to use the <tt>clang</tt> that came with Xcode for compiling +projects.</p> + +<h3>Why try open source builds?</h3> + +<p>The advantage of using open source analyzer builds (provided on this website) +is that they are often newer than the analyzer provided with Xcode, and thus can +contain bug fixes, new checks, or simply better analysis.</p> + +<p>On the other hand, new checks can be experimental, with results of variable +quality. Users are encouraged to <a href="filing_bugs.html">file bug reports</a> +(for any version of the analyzer) where they encounter false positives or other +issues.</p> + +<h3>set-xcode-analyzer</h3> + +<p>Starting with analyzer build checker-234, analyzer builds contain a command +line utility called <tt>set-xcode-analyzer</tt> that allows users to change what +copy of <tt>clang</tt> that Xcode uses for <i>Build and Analyze</i>:</p> + +<pre class="code_example"> +$ <b>set-xcode-analyzer -h</b> +Usage: set-xcode-analyzer [options] + +Options: + -h, --help show this help message and exit + --use-checker-build=PATH + Use the Clang located at the provided absolute path, + e.g. /Users/foo/checker-1 + --use-xcode-clang Use the Clang bundled with Xcode +</pre> + +<p>Operationally, <b>set-xcode-analyzer</b> edits Xcode's configuration files +(in <tt>/Developer</tt>) to point it to use the version of <tt>clang</tt> you +specify for static analysis. Within this model it provides you two basic modes:</p> + +<ul> + <li><b>--use-xcode-clang</b>: Switch Xcode (back) to using the <tt>clang</tt> that came bundled with it for static analysis.</li> + <li><b>--use-checker-build</b>: Switch Xcode to using the <tt>clang</tt> provided by the specified analyzer build.</li> +</ul> + +<h4>Examples</h4> + +<p>Telling Xcode to use checker-235 for <i>Build and Analyze</i>:</p> + +<pre class="code_example"> +$ pwd +/tmp +$ tar xjf checker-235.tar.bz2 +$ checker-235/set-xcode-analyzer --use-checker-build=/tmp/checker-235 +</pre> + +<p>Telling Xcode to use a very specific version of <tt>clang</tt>:</p> + +<pre class="code_example"> +$ set-xcode-analyzer --use-checker-build=~/mycrazyclangbuild/bin/clang +</pre> + +<p>Resetting Xcode to its default behavior:</p> + +<pre class="code_example"> +$ set-xcode-analyzer -use-xcode-clang +</pre> + +</div> +</div> +</body> +</html> + |