You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
6.0 KiB

---
title: Infer | Need help?
id: support
---
## Need help?
Do not hesitate to ask questions using the following channels, or to submit pull
request!
### GitHub issues
The [GitHub issues](https://github.com/facebook/Infer/issues) page is a good
place to ask questions, find answers, and report issues.
Please include as many details as possible when submitting a GitHub issue. If
your are able to run Infer, please include the contents of
`infer-out/toplevel.log` in your report. If not, please include at least your
operating system and the version of Infer that you are using.
### Updates
Keep up to date with the latest Infer news on our
[Facebook page](https://www.facebook.com/inferstaticanalyzer/) and our
[Twitter account](https://twitter.com/fbinfer).
### IRC
Our IRC channel is [`#infer`](irc://irc.libera.chat/infer) on [Libera Chat](https://libera.chat/).
## Troubleshooting
### Infer cannot analyze my CocoaPods project
In the presence of CocoaPods, you should use xcworkspace and not xcodeproj in
the compilation command that you supply to Infer. Here is an example you can
adapt to your project:
```bash
infer run -- xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld
```
### "infer [options] -- \<build command\>" fails during a linking step
The linker will sometimes not work if files have been compiled using a different
compiler, such as the one Infer uses [under the hood](/docs/infer-workflow) to
analyze your files.
A workaround consists in setting the `LD` environment variable to a dummy
linker, for instance:
```
LD=/bin/true infer [options] -- <build command>
```
### I get a compilation error involving PCH files when running Infer
For instance,
`error: PCH file uses an older PCH format that is no longer supported`.
This is a [known issue](https://github.com/facebook/infer/issues/96).
Please run Infer with the following environment variable setting:
```bash
GCC_PRECOMPILE_PREFIX_HEADER=NO
```
### Using Infer with Maven results in no output
Try upgrading `maven-compiler-plugin`. See also
[this GitHub issue](https://github.com/facebook/infer/issues/38).
### Infer reports a "Too many open files" error
The maximum number of files a program can simultaneously hold open is a bit low
on MacOs. You can increase the limit by running these commands for example:
```bash
sysctl -w kern.maxfiles=20480
sysctl -w kern.maxfilesperproc=22480
ulimit -S -n 2048
```
Note that the settings will be reset at the next reboot.
See also [this GitHub issue](https://github.com/facebook/infer/issues/22).
### I get a lint error when running Infer with gradle
You need to manually disable linters to run Infer. For instance
```bash
infer run -- gradle build -x lint
```
See also [this GitHub issue](https://github.com/facebook/infer/issues/58).
### Running "infer [options] -- \<build command\>" fails with some other error
Please make sure that:
- \<build command\> runs successfully on its own.
- `infer` is in your `$PATH` (try `which infer`, it should show where `infer` is
located)
### Running Infer fails with "ImportError: No module named xml.etree.ElementTree"
Make sure that the `xml` Python package is installed. For instance, on OpenSuse
13.1, it is provided by the
[`python-xmldiff`](http://software.opensuse.org/download.html?project=XML&package=python-xmldiff)
package.
### I get errors compiling Infer
Make sure the dependencies are up to date. They may change as we update Infer
itself; you may also need to recompile the facebook-clang-plugins when it
changes version. See the
[installation document](https://github.com/facebook/infer/blob/master/INSTALL.md)
for an up-to-date list of dependencies and how to get them.
### My problem is not listed here
Do not hesitate to [contact us](support#need-help?).
## FAQ
Here are some frequently asked questions. More to come.
### How do I suppress Infer warnings on a class or method?
In Java code, you can do this by annotating your class or method with
`@SuppressLint("infer")`. Or `@SuppressWarnings("infer")` if your Infer is older
than v0.10.0.
### Is Infer supported for Windows?
Infer is not supported on Windows at the moment. You may try installing Infer on
a Linux virtual machine if your project can be compiled on Linux.
### How does Infer compare to the Clang Static Analyzer?
On iOS there is the Clang Static analyzer. Infer does some things different, in
particular reasoning that spans across multiple files. But CSA checks for more
kinds of issues and is also more mature than Infer when it comes to iOS: we send
big respect to CSA! Infer has only got started there recently. Really, these
tools complement one another and it would even make sense to use both. Indeed,
that's what we do inside Facebook.
### How does Infer compare to Android linters and Findbugs?
Infer finds deeper infer-procedural bugs sometimes spanning multiple files.
Linters, in contrast, typically implement simple syntactic checks that are local
within one procedure. But they are valuable and Infer doesn't try to duplicate
what they are good at. At Facebook we run both Infer and a collection of Android
linters. Findbugs can be useful too; it is more akin to linters.
### Why Infer doesn't find a particular bug?
The answer here is for one of the checkers of Infer, the bi-abduction checker,
that finds Null Dereferences, Memory Leaks, Retain Cycles and other memory
related issues.
The analysis performs a symbolic execution of the code, keeping data structures
that represent a symbolic heap, and trying to prove memory safety of the
program. When it fails to prove it, it can report an error, if it finds a Null
Dereference or Memory Leak, or it can find itself in an inconsistent state. In
any case, it will stop the analysis of that particular procedure because the
attempted proof doesn't make sense anymore. Another cause of the analysis not
reaching some part of the code is that we introduce timeouts in the analysis,
because otherwise it would take too long. So it could reach a timeout before
reaching the end of the method. So when Infer doesn't find a particular bug,
it's possible that it is because it couldn't reach that part of the code.