1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 2 "http://www.w3.org/TR/html4/strict.dtd"> 3 <html> 4 <head> 5 <title>Clang Static Analyzer</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 <!-- Generated from: http://www.spiffycorners.com/index.php --> 10 11 <style type="text/css"> 12 .spiffy{display:block} 13 .spiffy *{ 14 display:block; 15 height:1px; 16 overflow:hidden; 17 font-size:.01em; 18 background:#EBF0FA} 19 .spiffy1{ 20 margin-left:3px; 21 margin-right:3px; 22 padding-left:1px; 23 padding-right:1px; 24 border-left:1px solid #f6f8fc; 25 border-right:1px solid #f6f8fc; 26 background:#f0f3fb} 27 .spiffy2{ 28 margin-left:1px; 29 margin-right:1px; 30 padding-right:1px; 31 padding-left:1px; 32 border-left:1px solid #fdfdfe; 33 border-right:1px solid #fdfdfe; 34 background:#eef2fa} 35 .spiffy3{ 36 margin-left:1px; 37 margin-right:1px; 38 border-left:1px solid #eef2fa; 39 border-right:1px solid #eef2fa;} 40 .spiffy4{ 41 border-left:1px solid #f6f8fc; 42 border-right:1px solid #f6f8fc} 43 .spiffy5{ 44 border-left:1px solid #f0f3fb; 45 border-right:1px solid #f0f3fb} 46 .spiffyfg{ 47 background:#EBF0FA} 48 49 .spiffyfg h2 { 50 margin:0px; padding:10px; 51 } 52 53 #left { float:left; } 54 #left h2 { margin:1px; padding-top:0px; } 55 #right { float:left; margin-left:20px; margin-right:20px; padding:0px ;} 56 #right h2 { padding:0px; margin:0px; } 57 #wrappedcontent { padding:15px;} 58 </style> 59 </head> 60 <body> 61 62 <div id="page"> 63 <!--#include virtual="menu.html.incl"--> 64 <div id="content"> 65 66 67 <table style="margin-top:0px" width="100%" border="0" cellpadding="0px" cellspacing="0"> 68 <tr><td> 69 70 <h1>Clang Static Analyzer</h1> 71 72 <p>The Clang Static Analyzer is source code analysis tool that find bugs in C 73 and Objective-C programs.</p> 74 75 <p>Currently it can be run either as a <a href="/scan-build.html">standalone 76 tool</a> or <a href="/xcode.html">within Xcode</a>. The standalone tool is 77 invoked from the command-line, and is intended to be run in tandem with a build 78 of a codebase.</p> 79 80 <p>The analyzer is 100% open source and is part of the <a 81 href="http://clang.llvm.org">Clang</a> project. Like the rest of Clang, the 82 analyzer is implemented as a C++ library that can be used by other tools and 83 applications.</p> 84 85 <h2>Download</h2> 86 87 <div style="padding:0px; font-size: 90%"> 88 <b class="spiffy"> 89 <b class="spiffy1"><b></b></b> 90 <b class="spiffy2"><b></b></b> 91 <b class="spiffy3"></b> 92 <b class="spiffy4"></b> 93 <b class="spiffy5"></b></b> 94 <div class="spiffyfg"> 95 <div style="padding:15px"> 96 <h3 style="margin:0px;padding:0px">Mac OS X</h3> 97 <ul> 98 <li>Latest build (Intel-only binary, 10.5+):<br> 99 <!--#include virtual="latest_checker.html.incl"--> 100 </li> 101 <li><a href="/release_notes.html">Release notes</a></li> 102 <li>This build can be used both from the command line and from within Xcode</li> 103 <li><a href="/installation.html">Installation</a> and <a href="/scan-build.html">usage</a></li> 104 </ul> 105 </div> 106 </div> 107 <b class="spiffy"> 108 <b class="spiffy5"></b> 109 <b class="spiffy4"></b> 110 <b class="spiffy3"></b> 111 <b class="spiffy2"><b></b></b> 112 <b class="spiffy1"><b></b></b></b> 113 </div> 114 115 <div style="padding:0; margin-top:10px; font-size: 90%"> 116 <b class="spiffy"> 117 <b class="spiffy1"><b></b></b> 118 <b class="spiffy2"><b></b></b> 119 <b class="spiffy3"></b> 120 <b class="spiffy4"></b> 121 <b class="spiffy5"></b></b> 122 <div class="spiffyfg"> 123 <div style="padding:15px"> 124 <h3 style="margin:0px;padding:0px">Other Platforms</h3> 125 <p>For other platforms, please follow the instructions for <a 126 href="/installation#OtherPlatforms">building the analyzer</a> from 127 source code.<p> 128 </div> 129 </div> 130 <b class="spiffy"> 131 <b class="spiffy5"></b> 132 <b class="spiffy4"></b> 133 <b class="spiffy3"></b> 134 <b class="spiffy2"><b></b></b> 135 <b class="spiffy1"><b></b></b></b> 136 </div> 137 138 139 </td><td style="padding-left:10px"> 140 <a href="images/analyzer_xcode.png"><img src="images/analyzer_xcode.png" width="450" alt="analyzer in xcode"></a> 141 <div style="text-align:center"><b>Viewing static analyzer results in Xcode 3.2</b></div> 142 <a href="images/analyzer_html.png"><img src="images/analyzer_html.png" width="450" alt="analyzer in browser"></a> 143 <div style="text-align:center"><b>Viewing static analyzer results in a web browser</b></div> 144 </td></tr></table> 145 146 <h2 id="StaticAnalysis">What is Static Analysis?</h2> 147 148 <p>The term "static analysis" is conflated, but here we use it to mean 149 a collection of algorithms and techniques used to analyze source code in order 150 to automatically find bugs. The idea is similar in spirit to compiler warnings 151 (which can be useful for finding coding errors) but to take that idea a step 152 further and find bugs that are traditionally found using run-time debugging 153 techniques such as testing.</p> 154 155 <p>Static analysis bug-finding tools have evolved over the last several decades 156 from basic syntactic checkers to those that find deep bugs by reasoning about 157 the semantics of code. The goal of the Clang Static Analyzer is to provide a 158 industrial-quality static analysis framework for analyzing C and Objective-C 159 programs that is freely available, extensible, and has a high quality of 160 implementation.</p> 161 162 <h3 id="Clang">Part of Clang and LLVM</h3> 163 164 <p>As its name implies, the Clang Static Analyzer is built on top of <a 165 href="http://clang.llvm.org">Clang</a> and <a href="http://llvm.org">LLVM</a>. 166 Strictly speaking, the analyzer is part of Clang, as Clang consists of a set of 167 reusable C++ libraries for building powerful source-level tools. The static 168 analysis engine used by the Clang Static Analyzer is a Clang library, and has 169 the capability to be reused in different contexts and by different clients.</p> 170 171 <h2>Important Points to Consider</h2> 172 173 <p>While we believe that the static analyzer is already very useful for finding 174 bugs, we ask you to bear in mind a few points when using it.</p> 175 176 <h3>Work-in-Progress</h3> 177 178 <p>The analyzer is a continuous work-in-progress. 179 There are many planned enhancements to improve both the precision and scope of 180 its analysis algorithms as well as the kinds bugs it will find. While there are 181 fundamental limitations to what static analysis can do, we have a long way to go 182 before hitting that wall.</p> 183 184 <h3>Slower than Compilation</h3> 185 186 <p>Operationally, using static analysis to 187 automatically find deep program bugs is about trading CPU time for the hardening 188 of code. Because of the deep analysis performed by state-of-the-art static 189 analysis tools, static analysis can be much slower than compilation.</p> 190 191 <p>While the Clang Static Analyzer is being designed to be as fast and 192 light-weight as possible, please do not expect it to be as fast as compiling a 193 program (even with optimizations enabled). Some of the algorithms needed to find 194 bugs require in the worst case exponential time.</p> 195 196 <p>The Clang Static Analyzer runs in a reasonable amount of time by both 197 bounding the amount of checking work it will do as well as using clever 198 algorithms to reduce the amount of work it must do to find bugs.</p> 199 200 <h3>False Positives</h3> 201 202 <p>Static analysis is not perfect. It can falsely flag bugs in a program where 203 the code behaves correctly. Because some code checks require more analysis 204 precision than others, the frequency of false positives can vary widely between 205 different checks. Our long-term goal is to have the analyzer have a low false 206 positive rate for most code on all checks.</p> 207 208 <p>Please help us in this endeavor by <a href="filing_bugs.html">reporting false 209 positives</a>. False positives cannot be addressed unless we know about 210 them.</p> 211 212 <h3>More Checks</h3> 213 214 <p>Static analysis is not magic; a static analyzer can only find bugs that it 215 has been specifically engineered to find. If there are specific kinds of bugs 216 you would like the Clang Static Analyzer to find, please feel free to 217 file <a href="filing_bugs.html">feature requests</a> or contribute your own 218 patches.</p> 219 220 </div> 221 </div> 222 </body> 223 </html> 224 225