gpt4 book ai didi

c++ - 如何找到未初始化的堆栈变量

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:51 25 4
gpt4 key购买 nike

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

谢谢。

最佳答案

使用 -ftrapuv 或 Valgrind 的 memcheck正如评论中所建议的那样可以工作,但这些是动态分析,只会捕获运行时出现的错误;如果您的测试执行没有执行有缺陷的代码,这些工具将无济于事。

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

关于c++ - 如何找到未初始化的堆栈变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26469158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com