考虑以下程序
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(使用他们的在线演示)g++ -fsanitize=address
以及g++ -fsanitize=undefined
, 和valgrind
. 但是这些工具不会报告我x.d
在阅读时未初始化。
我可以使用哪些工具来捕获这些未定义的行为(最好在 Linux 上运行)?