从MSVS内部和外部运行应用程序的区别

时间:2013-01-14 23:55:01

标签: c# visual-studio c#-4.0 xna xna-4.0

我注意到我正在开发的应用程序(用C#/ XNA编写的游戏)偶尔会有不同的行为,具体取决于它是从Microsoft Visual Studio(2010)中启动还是在MSVS外部启动时(例如从Windows启动)资源管理器)。具体来说,有时我会在MSVS中发生错误(绘制例外)。

造成这种差异的原因是什么?理想情况下,有一种方法可以使MSVS尽可能严格地检查应用程序,这样我就可以确保在开发过程中确实发生了所有错误(并且可以修复)。

问题在发布和调试模式下都会发生。游戏使用了许多外部dll(nuclex lib,sharp dx),但这些lib都是在MSVS内部和外部使用的。游戏完全在一个线程中运行。

请注意,问题不是我需要调试的特定错误,而是关于(可能)从应用程序启动方式产生的一般差异。

1 个答案:

答案 0 :(得分:2)

在Visual Studio中运行时,有两个主要原因导致程序以不同的方式运行。

首先,Visual Studio hosting process。我认为它默认是禁用的。但是,如果需要,它的切换位于应用程序项目属性的“调试”选项卡中。

第二个问题是,当连接调试器时,.NET JIT将发出不同的,可调试的机器代码。您可以通过取消选中工具中的“抑制模块加载时的JIT优化(仅管理)”复选框来禁用this behaviour。选项 - >调试 - >一般

你可以尝试禁用此选项,然后在调试器下运行游戏,看看是否发生了同样的错误。请注意,当然,禁用此功能会使您的程序显着难以调试 - 但在这种情况下它确实有用。

正如评论中所提到的,这种问题与代码生成有关是几乎闻所未闻的(尽管理论上我认为这是可能的)。由性能变化引起的潜在线程错误的可能性更大。它也可能是一个表现不佳的原生图书馆 - 虽然这也很不寻常。