C#XNA Visual Studio:"发布"和"调试"模式之间的区别?

Nic*_*ner 7 c# xna visual-studio-2008

我正在研究一个关于碰撞检测的演示.(这里详细说明一些代码.)在调试模式下,它工作正常.在释放模式下,它更快,但碰撞检测真的搞砸了.物体没有任何反弹,或者似乎被重力奇怪地轻微影响.有些物体爆炸,好像它们与特殊爆炸物体相撞,即使这些物体都不存在.

那么...... Visual Studio在Release和Debug模式之间改变了什么导致了这个问题呢?(我正在使用VS Pro 2008.)

神秘的是,发布模式一直在努力进行大量的开发.它刚刚停止了.

Eri*_*ert 11

我的心灵力量不是很大,如果不进行实际调试就很难分辨出发生了什么.但这是一个猜测.我在这里讨论的问题:

为什么这个浮点计算在不同的机器上给出不同的结果?

不仅适用于"跨机器",还适用于"调试与发布".不仅可能,而且程序的发布版本可能使用比调试版本更高的精度数学.如果你有浮点错误那么完全有可能只是运气不好你只是在高精度发布版本而不是低精度调试版本中遇到错误.

为什么不同?因为在未优化的版本中,C#编译器经常为临时值生成代码,就像它们是局部变量一样; 然后,抖动实际上在堆栈上分配临时本地,并将临时值从寄存器写入本地.然后当它需要它们时,它会将它们从临时数据中读回寄存器.这段旅程可能会导致高精度寄存器中的值被截断为仅64位精度,从而失去精度.

在优化版本中,C#编译器和抖动更加努力地将所有内容保存在寄存器中,因为显然更快更高精度,但更难调试.

祝好运.只在发布模式下重现的错误是一种彻底的痛苦.


Jus*_* R. 5

首先,输入任何#if(DEBUG)或#if(RELEASE)编译指示.您可能在一个或另一个应该或不应该调用的代码中进行编码,因此请搜索这些代码.

除此之外,默认情况下,Release版本设置为"优化代码",而Debug则不是.尝试在发布配置中更改该设置(项目>属性>构建>"优化代码"),看看是否能解决问题.