繁体   English   中英

如何在VC ++中调试未初始化的变量

[英]How to debug uninitialized variables in VC++

如何在C ++中以发布模式调试未初始化的变量。

这是一个警告。 您应该尝试始终在最高警告级别干净地编译。 对于VC ++,这是4级。仅选择性地关闭特定的恼人警告。

此外, 除非您故意取消选中该选项否则 VC ++将使用/RTCu (甚至/RTCsu )进行编译,它会在运行时进行检查以捕获未初始化的变量

当然,正确的编程风格(尽可能晚地引入变量)将防止这些错误首先发生。

通常,您不希望调试未初始化的变量,而是希望防止这种可能性,例如使用带有ctors的类/对象,因此自动创建一个并且不可避免地初始化它。

当你使用像int这样的东西时,它通常应该在它创建的时候进行初始化,因此从简单的检查中可以看出未初始化的变量非常明显(并且你通常希望保持你的函数足够小以至于这样的检查很容易)。

最后,大多数不错的编译器都可以警告你至少在没有初始化的情况下使用变量的尝试。 显然,应始终启用此类警告。 重要的一点是:这些通常依赖于主要用于优化的数据流分析,因此许多编译器只能在启用至少一定程度的优化时发出此类警告。

我不知道VC ++,但是对于gcc,有一个警告选项-Wuninitialized ,可以在编译时使用。 详情: http//gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

附加-Wuninitialized包含在-Wall ,即警告所有,推荐和最常用的警告标志之一。 此外,只要出现任何此类警告,使用-Werror就会使编译失败。

未初始化的变量是一个令人讨厌的错误。 一些静态检查器可能会找到你未初始化的变量。 有开源的。 您也可以获得商业版的试用版。

如果您没有调试器,则需要在代码中的任何位置添加日志记录语句,以查看您怀疑未初始化的变量值。

有时,如果传递未初始化的指针,日志记录语句可能会导致崩溃。 所以你可以在这种情况下捕获那里的bug。

您需要使用调试符号构建发布二进制文件。 这里是如果你在Visual Studio中可能会有所帮助的参考。

其他实现也必须有类似的东西。

使用CPPcheck (开源)或PC-Lint (商业)之类的东西来检查它们。 他们将帮助发现许多其他错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM