如何在C ++中以发布模式调试未初始化的变量。
答案 0 :(得分:10)
这是一个警告。您应该尝试始终在最高警告级别干净地编译。对于VC ++,这是4级。仅选择性地关闭特定的恼人警告。
此外, 除非您故意取消选中 选项,否则VC ++将使用/RTCu
(甚至/RTCsu
)进行编译,并对< strong> 在运行时捕获未初始化的变量 。
当然,正确的编程风格(尽可能晚地引入变量)将首先防止此类错误发生。
答案 1 :(得分:2)
通常,您不希望调试未初始化的变量,而是希望防止这种可能性,例如使用带有ctors的类/对象,因此自动创建一个并且不可避免地将其初始化。
当你使用像int
这样的东西时,它通常应该按照它的创建进行初始化,所以未经初始化的变量将从简单的检查中非常明显(并且你通常希望保持你的功能足够小以至于这样的检查很容易)。
最后,大多数不错的编译器都可以警告你至少在没有初始化的情况下使用变量的尝试。显然,应始终启用此类警告。重要的一点是:这些通常依赖于主要用于优化的数据流分析,因此许多编译器只能在启用至少一定程度的优化时发出此类警告。
答案 2 :(得分:1)
我不了解VC ++,但对于gcc,有一个警告选项-Wuninitialized
可以在编译时使用。详情:http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
追加:-Wuninitialized
包含在-Wall
中,即警告全部,推荐和最常用的警告标志之一。此外,只要出现任何此类警告,-Werror
就会使编译失败。
答案 3 :(得分:0)
未初始化的变量是一个令人讨厌的错误。一些静态检查器可能会找到你未初始化的变量。有开源的。您也可以获得商业版的试用版。
答案 4 :(得分:0)
如果您没有调试器,则需要在代码中的任何位置添加日志记录语句,以查看您怀疑未初始化的变量值。
有时,如果传递未初始化的指针,日志记录语句可能会导致崩溃。所以你可以在这种情况下捕捉到它自己的错误。
答案 5 :(得分:0)
您需要使用调试符号构建发布二进制文件。 Here是一个参考,如果你在Visual Studio上可能会有所帮助。
对于其他实现也必须有类似的东西。
答案 6 :(得分:0)