C++ 如何查找未初始化的堆栈变量
我收到一个遗留代码(c),它似乎在不同的时间产生不同的结果。 我能够使用intel的编译器和编译器标志-ftrapuv始终如一地重现这个问题,这非常有效,并且我能够确定未初始化的变量是某个堆栈变量。 问题是,下一阶段是什么? 有人知道如何打印所有堆栈变量的回溯吗?(或仅打印堆栈内容) 有没有人有什么建议或者知道英特尔能提供什么帮助?或者我应该继续处理这个问题C++ 如何查找未初始化的堆栈变量,c++,c,stack,intel,icc,C++,C,Stack,Intel,Icc,我收到一个遗留代码(c),它似乎在不同的时间产生不同的结果。 我能够使用intel的编译器和编译器标志-ftrapuv始终如一地重现这个问题,这非常有效,并且我能够确定未初始化的变量是某个堆栈变量。 问题是,下一阶段是什么? 有人知道如何打印所有堆栈变量的回溯吗?(或仅打印堆栈内容) 有没有人有什么建议或者知道英特尔能提供什么帮助?或者我应该继续处理这个问题 谢谢。使用注释中建议的-ftrapuv或Valgrind可以工作,但这些是动态分析,只会捕获运行时执行的错误;如果您的测试执行没有执行错误
谢谢。使用注释中建议的
-ftrapuv
或Valgrind可以工作,但这些是动态分析,只会捕获运行时执行的错误;如果您的测试执行没有执行错误代码,这些工具将不会有帮助
幸运的是,使用未初始化的堆栈变量通常可以很容易地静态检测到,并且编译器中的标志可以帮助您捕捉到这一点。gcc和Intel的icc都支持
-Wuninitialized
标志,该标志将打印有关违规代码的警告。gcc还支持一个-Wmaybe uninitialized
标志,当存在一些未初始化变量的代码路径时,该标志将发出警告;请注意后一种分析容易出现误报。您可以使用sparse
对代码进行静态分析。这是一个开源和非常强大的工具。链接如下: