Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何查找未初始化的堆栈变量_C++_C_Stack_Intel_Icc - Fatal编程技术网

C++ 如何查找未初始化的堆栈变量

C++ 如何查找未初始化的堆栈变量,c++,c,stack,intel,icc,C++,C,Stack,Intel,Icc,我收到一个遗留代码(c),它似乎在不同的时间产生不同的结果。 我能够使用intel的编译器和编译器标志-ftrapuv始终如一地重现这个问题,这非常有效,并且我能够确定未初始化的变量是某个堆栈变量。 问题是,下一阶段是什么? 有人知道如何打印所有堆栈变量的回溯吗?(或仅打印堆栈内容) 有没有人有什么建议或者知道英特尔能提供什么帮助?或者我应该继续处理这个问题 谢谢。使用注释中建议的-ftrapuv或Valgrind可以工作,但这些是动态分析,只会捕获运行时执行的错误;如果您的测试执行没有执行错误

我收到一个遗留代码(c),它似乎在不同的时间产生不同的结果。 我能够使用intel的编译器和编译器标志-ftrapuv始终如一地重现这个问题,这非常有效,并且我能够确定未初始化的变量是某个堆栈变量。 问题是,下一阶段是什么? 有人知道如何打印所有堆栈变量的回溯吗?(或仅打印堆栈内容) 有没有人有什么建议或者知道英特尔能提供什么帮助?或者我应该继续处理这个问题


谢谢。

使用注释中建议的
-ftrapuv
或Valgrind可以工作,但这些是动态分析,只会捕获运行时执行的错误;如果您的测试执行没有执行错误代码,这些工具将不会有帮助


幸运的是,使用未初始化的堆栈变量通常可以很容易地静态检测到,并且编译器中的标志可以帮助您捕捉到这一点。gcc和Intel的icc都支持
-Wuninitialized
标志,该标志将打印有关违规代码的警告。gcc还支持一个
-Wmaybe uninitialized
标志,当存在一些未初始化变量的代码路径时,该标志将发出警告;请注意后一种分析容易出现误报。

您可以使用
sparse
对代码进行静态分析。这是一个开源和非常强大的工具。链接如下:


试试valgrind,它会查找未初始化变量的读取并打印stacktrace。您可以使用即将推出的CLang和GCC版本中新的和改进的UBSanitizer!编译时打开所有警告。或使用任何一种静态分析仪。(我不会提及我曾经工作过的那个,但它非常昂贵而且是最好的。找一个更便宜的免费的:这个错误对于工具来说并不难找到。)