0

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

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

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

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

4

1 回答 1

2

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

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

第二,当附加调试器时,.NET JIT 将发出不同的、更易于调试的机器代码。您可以通过取消选中工具 -> 选项 -> 调试 -> 常规中的“在模块加载时抑制 JIT 优化(仅限托管) ”复选框来禁用此行为。

您可以尝试禁用此选项,然后在调试器下运行游戏并查看是否出现相同的错误。请注意,当然,禁用此功能将使您的程序更难调试 - 但在这种情况下确实有帮助。

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

于 2013-01-15T03:10:21.177 回答