c++ - 哪些工具可以报告此类未初始化变量的使用情况?

标签 c++ debugging undefined-behavior sanitizer

考虑下面的程序

struct X
{
    int d;
    X(){} // forget to initialize d
};

int main()
{
    X x;
    volatile int y=x.d; // read uninitialized d
    (void)y; // (kill useless warning)
}

显然它有未定义的行为,我通常希望能够使用一些调试工具来捕捉。我试过 cppcheck(使用他们的 online demo )和 g++ -fsanitize=address 以及 g++ -fsanitize=undefinedvalgrind .但是这些工具不会向我报告 x.d 在读取时未初始化。

我可以使用什么工具来捕捉这些未定义的行为(最好在 Linux 上运行)?

最佳答案

扫描提供的例子

$ more test.cpp 
struct X
{
  int d;
  X(){} // forget to initialize d
};

int main()
{
  X x;
  volatile int y=x.d; // read uninitialized d
  (void)y; // (kill useless warning)
}

使用最新版本的 cppcheck(版本 1.72 dev)给出:

$ cppcheck --enable=all test.cpp 
 Checking test.cpp...
 [test.cpp:4]: (warning) Member variable 'X::d' is not initialized in the constructor.

关于c++ - 哪些工具可以报告此类未初始化变量的使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34478831/

相关文章:

visual-studio-2010 - Visual Studio 2010 突然停止显示调试输出

visual-studio - 在VS2005/2008中自动化 "Attach to Process"

c - 为什么返回一个未初始化的值被认为是未定义的行为?

c++ - 如何修改Qt中的注册表设置?

java - Eclipse 中的 Maven 构建调试

c++ - 创建一个新对象似乎改变了之前创建的另一个对象(???)

c++ - 代码的有效性

c++ - 使用模板函数作为模板参数

c++ - 指向普通变量的常量指针

c++ - 删除被另一个进程锁定的文件