Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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++ Visual Studio-在优化的生成中纠正不同的行为_C++_Visual Studio_Visual Studio 2010_Debugging_Release - Fatal编程技术网

C++ Visual Studio-在优化的生成中纠正不同的行为

C++ Visual Studio-在优化的生成中纠正不同的行为,c++,visual-studio,visual-studio-2010,debugging,release,C++,Visual Studio,Visual Studio 2010,Debugging,Release,我正在做一个项目。我最近将它切换到完全优化的发布模式,只是想了解一些事情在调试模式之外的表现。然而,在这样做时,我注意到有一些不规则之处。在我的特殊情况下,我有一个sprite,它的alpha值在发布模式下与调试模式下不同(更透明) 为了检查我的发现,我复制了一份发布模式构建选项,但关闭了优化(确保删除了调试和其他相关的预处理器选项),并且执行正确。优化过程中的某些内容会修改系统的行为。这可能是因为在我的类的某个地方有一些变量我没有初始化 我的问题是,除了手动梳理我的代码外,是否还有其他方法来确

我正在做一个项目。我最近将它切换到完全优化的发布模式,只是想了解一些事情在调试模式之外的表现。然而,在这样做时,我注意到有一些不规则之处。在我的特殊情况下,我有一个sprite,它的alpha值在发布模式下与调试模式下不同(更透明)

为了检查我的发现,我复制了一份发布模式构建选项,但关闭了优化(确保删除了调试和其他相关的预处理器选项),并且执行正确。优化过程中的某些内容会修改系统的行为。这可能是因为在我的类的某个地方有一些变量我没有初始化

我的问题是,除了手动梳理我的代码外,是否还有其他方法来确保正确初始化?我已经检查了弹出的警告,但是所有警告都与int-to-float/float-to-int转换以及可能丢失的数据和枚举限定符有关,并且没有一个与我的精灵上的alpha相关


如果Visual Studio 2010有什么不同的话,我会使用它。

这种类型的东西可能很难调试。我建议您逐个替换优化,直到找到导致异常的优化。然后,您可以将优化逐一应用于每个翻译单元(文件),从而进一步缩小问题范围


处理此问题的另一种方法本质上是数据跟踪。分析代码以确定控制alpha的数据项。找到写入数据的每条语句。在这些语句上放置断点或跟踪。然后确定可执行文件中发布数据与调试数据不同的第一个点。

这类事情可能很难调试。我建议您逐个替换优化,直到找到导致异常的优化。然后,您可以将优化逐一应用于每个翻译单元(文件),从而进一步缩小问题范围


处理此问题的另一种方法本质上是数据跟踪。分析代码以确定控制alpha的数据项。找到写入数据的每条语句。在这些语句上放置断点或跟踪。然后确定可执行文件中发布数据与调试数据不同的第一个点。

打开尽可能多的警告以捕获未初始化的变量。通过静态LINT工具运行代码,如cppcheck。我已经有一段时间没有使用VS了,但我很确定您可以设置调试器,在访问未初始化的变量访问时中断,并从那里跟踪它


如果代码是多线程的,则可能存在争用条件,或者编译器可能正在重新排序,如果线程没有交互,通常不会产生任何影响,因此如果是这种情况,请仔细检查锁的正确使用。

打开尽可能多的警告以捕获未初始化的变量。通过静态LINT工具运行代码,如cppcheck。我已经有一段时间没有使用VS了,但我很确定您可以设置调试器,在访问未初始化的变量访问时中断,并从那里跟踪它


如果代码是多线程的,则可能存在争用条件,或者编译器可能正在重新排序,如果线程没有交互,通常不会产生任何影响,因此如果是这种情况,请仔细检查锁的正确使用。

对所有成员变量使用始终初始化的模板

template<typename T> class always_initialized {
    T t;
public:
    operator T&() { return t; }
    operator const T&() const { return t; }
    always_initialized() : t(T()) {}
    template<typename K> always_initialized(K&& ref) : t(std::forward<K>(ref)) {}
};
始终初始化模板类{ T; 公众: 运算符T&({return T;} 运算符常量T&()常量{return T;} 总是初始化::t(t()){ 模板总是初始化(K&&ref):t(std::forward(ref)){ };
为所有成员变量使用始终初始化的模板

template<typename T> class always_initialized {
    T t;
public:
    operator T&() { return t; }
    operator const T&() const { return t; }
    always_initialized() : t(T()) {}
    template<typename K> always_initialized(K&& ref) : t(std::forward<K>(ref)) {}
};
始终初始化模板类{ T; 公众: 运算符T&({return T;} 运算符常量T&()常量{return T;} 总是初始化::t(t()){ 模板总是初始化(K&&ref):t(std::forward(ref)){ };
我们不是神谕-渲染时使用什么?alpha是浮点值还是整数值?你玩弄alpha值的代码是什么样子的?我现在根本不涉及alpha值,这就是为什么我认为它与渲染/图形方面无关,而是与我的类中缺少初始化有关。我正在寻找一种方法来找到缺少初始化的地方我们不是预言家-渲染时使用什么?alpha是浮点值还是整数值?你玩弄alpha值的代码是什么样子的?我现在根本没有触及alpha值,这就是为什么我认为它与渲染/图形方面无关,而是与我的类中缺少初始化有关。我正在寻找一种方法来找到缺少初始化的地方