<div dir="ltr"><div><div><div><div><div><div>Hello,<br><br>I have developed a simple checker, just to become familiar with Clang's Checker API. I have sucessfully compiled it and installed in package alpha.security. For the sake of understanding and tracing the execution flow of the checker, I have added some "debug" lines like the following (I'm aware this is discouraged):<br>

<br>llvm::outs() << "BEGIN: checkPreStmt" << "\n";<br><br>I run scan-build or clang --analyze, as suggested in previous answers, but I don't see the messages printed out. The commands I'm running are:<br>

<br></div>(1) clang --analyze my_file.c<br><br></div>(2) scan-build clang -c my_file.c<br><br></div>Reading the manual, I understand that the reason is that "my" checker is not enabled by default, only a few.<br>

<br></div>So I tried the following command to enable it:<br><br>(3) scan-build -enable-checker alpha.security.DCL41C clang -c my_file.c<br><br></div>but again my "debugging" messages don't appear in the standard output. So enabling verbose info with "-v -v" in command (3), I can see the complete command line run behind the scenes, and scan-build is passing:<br>

<br>'-analyzer-checker' 'alpha.security.DCL41C'<br><br></div>but I've remarked that the checkers enabled by default are being enabled like this:<br><br> '-analyzer-checker=core' '-analyzer-checker=unix' '-analyzer-checker=deadcode' '-analyzer-checker=security.insecureAPI.UncheckedReturn'<br>

<div><div><br></div><div>So I saved the complete command lie to a shell script, and changed the options '-analyzer-checker' 'alpha.security.DCL41C' to '-analyzer-checker=alpha.security.DCL41C'<br>
<br>
</div><div>The same problem: I don't see the messages of llvm:outs, so I don't whether my checker is being called, or the output of llvm::outs is going to some other place I don't know.<br><br></div><div>My Clang version is a build that dates back to late Dec. 2013. I hope it's not a bug :-(<br>

<br>clang version 3.5 (trunk 197976) (llvm/trunk 197973)<br>Target: x86_64-unknown-linux-gnu<br>Thread model: posix<br><br></div><div>Any help would he highly appreciated<br></div><div><div><div><div><div><div><div class="gmail_extra">

<br><div class="gmail_quote">Date: Tue, 25 Feb 2014 11:37:17 -0800<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
From: Michael Katelman <<a href="mailto:katelman@gmail.com" target="_blank">katelman@gmail.com</a>><br>
To: Ted Kremenek <<a href="mailto:kremenek@apple.com" target="_blank">kremenek@apple.com</a>><br>
Cc: <a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
Subject: Re: [cfe-dev] analyzer: invoking a single analyzer from the<br>
        static analysis tools.<br>
Message-ID:<br>
        <<a href="mailto:CAAn2fBCGH69fAWP_kXGpwpqjAykj29ps9RfcPbNi9e4foqqKuQ@mail.gmail.com" target="_blank">CAAn2fBCGH69fAWP_kXGpwpqjAykj29ps9RfcPbNi9e4foqqKuQ@mail.gmail.com</a>><br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
Hi Ted,<br>
<br>
Thanks for the help! I actually have a follow-up question, though. This<br>
question came up because I was toying around with developing my own simple<br>
checker and wanted to test it out. My first inclination was to do this in<br>
isolation from the other checkers which is why I attempted the invocation<br>
from my original post, but perhaps you're saying that even for a dev<br>
situation like this just run the whole platter of checkers? Or, did you<br>
just mean for a general usage scenario where someone isn't adding new<br>
checkers etc.?<br>
<br>
I just ended up using --analyze because the scan-build command I could<br>
figure out was somewhat more verbose, needing --use-analyzer=... etc.; but,<br>
I was mostly fumbling around trying to get it to work, so I'm sure I'm<br>
missing a bunch of different things.<br>
<br>
Thanks again.<br>
<br>
-Mike<br>
<br>
<br>
On Tue, Feb 25, 2014 at 11:00 AM, Ted Kremenek <<a href="mailto:kremenek@apple.com" target="_blank">kremenek@apple.com</a>> wrote:<br>
<br>
> Hi Michael,<br>
><br>
> It's not recommended to run the low-level driver like this.  You can just<br>
> use scan-build, for example:<br>
><br>
>   $ scan-build clang -c /tmp/main.c<br>
><br>
> or more generally<br>
><br>
>   $ scan-build <compiler line><br>
><br>
> You can also use:<br>
><br>
>   $ clang --analyze /tmp/main.c<br>
><br>
> directly.  That's somewhat discouraged because the long-term idea is that<br>
> the static analyzer supports global analysis.  The intention is that you<br>
> can declare a set of files to analyze and they get analyzed together,<br>
> whereas the latter line is clearly just analyzing a particular file using<br>
> clang.<br>
><br>
> Cheers,<br>
> Ted<br>
><br>
> On Feb 21, 2014, at 2:22 PM, Michael Katelman <<a href="mailto:katelman@gmail.com" target="_blank">katelman@gmail.com</a>> wrote:<br>
><br>
> > I was wondering if someone might be able to help me with cleanly<br>
> invoking a single analyzer from the static analysis tools.<br>
> ><br>
> > I am not sure what I need to do (or, should be doing instead) in a<br>
> situation like the one below where I've got a header like stdio.h included<br>
> (--analyze figures it out, but then it appears that I lose the ability to<br>
> apply a single checker) :<br>
> ><br>
> > %  ./Debug+Asserts/bin/clang -cc1 -analyze<br>
> -analyzer-checker=core.DivideZero ./tmp/main.c<br>
> ><br>
> > ./tmp/main.c:1:10: fatal error: 'stdio.h' file not found<br>
> > #include <stdio.h><br>
> >          ^<br>
> > 1 error generated.<br>
> ><br>
> >  % cat ./tmp /main.c<br>
> ><br>
> > #include <stdio.h><br>
> ><br>
> > int main( int argc, char** argv){<br>
> >   int x = 1;<br>
> >   int y = 0;<br>
> ><br>
> >   printf("%d\n", x / y);<br>
> ><br>
> >   return  0;<br>
> > }<br>
> ><br>
> > Thanks!<br>
> ><br>
> > -Mike<br>
> > _______________________________________________<br>
> > cfe-dev mailing list<br>
> > <a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
><br></blockquote></div></div></div></div></div></div></div></div></div></div>