看起来很容易找到这样的Java工具(Checkstyle,JCSC),但我似乎找不到一个用于C/C++的工具.我不是在寻找类似于lint的静态代码分析器,我只想检查编码标准,如变量命名,大小写,间距,标识,括号放置等.
通常在C下gcc,我将从以下一组警告标志开始(从多个来源痛苦地组装):
-Wall -Wextra -Wformat-nonliteral -Wcast-align -Wpointer-arith -Wbad-function-cast \
-Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Winline -Wundef \
-Wnested-externs -Wcast-qual -Wshadow -Wwrite-strings -Wno-unused-parameter \
-Wfloat-equal -pedantic -ansi
Run Code Online (Sandbox Code Playgroud)
我将使用这组警告构建(至少我的调试版本)并修复我可能做的所有事情(通常是一切),然后只删除标记,如果它们不相关或不可修复(几乎从不这样).有时,-Werror如果我必须在编译时离开,我也会添加.
我只是拿起C++(是的,我落后了15年),我想从右脚开始.
我的问题是:是否有人为C++预先编译了类似的完整警告标志集g++?(我知道其中很多都是一样的.)
我正在开发一个项目,我在UNIX环境中用C编码.我一直在使用lint工具来检查我的源代码.Lint已经存在了很长时间(自1979年以来),任何人都可以建议我可以使用更新的代码分析工具吗?优选地是免费的工具.
我目前正在开发一个大型和旧的C++应用程序,在我之前有许多开发人员.项目,类和函数中有很多"死代码",任何人都不会使用它们.
有哪些工具可用于C++分析大型代码库以检测和重构死代码?注意:我不是在谈论像gcov这样的测试覆盖率工具.
你如何在项目中找到死代码?
在多线程嵌入式软件(用C或C++编写)中,必须为线程提供足够的堆栈空间,以使其能够完成其操作而不会溢出.在某些实时嵌入式环境中,正确调整堆栈大小至关重要,因为(至少在我使用过的某些系统中),操作系统不会为您检测到这一点.
通常,在创建线程时(即在pthread_create()等的参数中)指定新线程(除主线程之外)的堆栈大小.通常,这些堆栈大小被硬编码为在最初编写或测试代码时已知良好的值.
但是,对代码的未来更改通常会破坏硬编码堆栈大小所基于的假设,并且在一个重要的日子里,您的线程进入其调用图的更深层分支之一并溢出堆栈 - 从而导致整个系统崩溃或者默默地腐蚀记忆.
在线程中执行的代码在堆栈上声明struct实例的情况下,我个人已经看到了这个问题.当结构体被扩充以容纳额外数据时,堆栈大小相应地膨胀,可能允许堆栈溢出发生.我想这对于已建立的代码库来说可能是一个巨大的问题,其中无法立即知道向结构添加字段的全部效果(太多的线程/函数来查找使用该结构的所有位置).
由于对"堆栈大小"问题的通常响应是"它们不可移植",因此我们假设编译器,操作系统和处理器都是此调查的已知数量.我们也假设没有使用递归,所以我们没有处理"无限递归"场景的可能性.
有哪些可靠的方法来估计线程所需的堆栈大小?我更喜欢离线(静态分析)和自动方法,但欢迎所有想法.
#include <iostream>
int main(int argc, char** args) {
int foo = foo + 4;
std::cout << foo << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
还有一个后续问题,是否有一个编译器标志来阻止这种事情?我发现-Wall有时会工作,最好是完全防止它.
My compiler:
g++ -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
Run Code Online (Sandbox Code Playgroud) 我最近被问及Coverity Prevent的替代方案,其代码库包括C/C++和Java.显然,在Java方面,可用的免费工具包括Findbugs(编译代码分析)和PMD(静态代码分析).它们非常强大,特别是当您开始研究与IDE的集成时(同样,它是免费的).
但是,当您开始使用各种编译器,体系结构等进入C/C++领域时,事情会很糟糕.
我已经为Java方面提出了各种工具,包括Findbugs和PMD.当我考虑使用以下指标时,我正在寻找的是C/C++方面的最佳选择:
最终的工具将是Findbugs和PMD具有相同功能集的组合,并且每个座位的零美元都是有用和可用的.
可能重复:有
哪些开源C++静态分析工具可用?
有没有人知道Linux中的C++代码的开源,良好的静态代码分析器?这个想法是在代码进入代码审查状态之前捕获编程错误.有可能为工具添加规则会很棒.有人知道这样的工具吗?
如果没有编译代码,我希望GCC或Clang报告警告.
是否可以仅运行编译器进行静态分析?
我找不到传递编译器警告标志的方法,并告诉它不要编译.
编辑:刚发现clang有静态分析器
我们使用Klocwork作为静态分析工具.
Klocwork是一种商业工具,具有许多优点,但也存在假阳性等局限性.
我想知道谁曾将Klocwork与Findbugs等其他开源工具进行比较.
通常,已知商业工具比开源工具更可靠.
但我认为Klocwork在特定业务领域也有一些可靠的问题,比如android.
你能否说Klocwork优于其他开源工具,尤其是Findbugs在误报和漏报方面?