2

我有一个我试图调试的问题,只有在我运行直接在 Visual Studio 之外构建的发布 exe 时才会发生。当我在 Visual Studio 中执行它时,即使在使用特定项目属性来调试“发布”构建(例如打开优化)时,程序也会正常运行,如下页所述。

http://msdn.microsoft.com/en-us/library/fsk896zz%28v=vs.100%29.aspx

我在使用这些设置和从 VS 运行/调试时没有遇到任何问题,但是当我将 exe 和所需的文件(图像和一些 dll)复制到它自己的目录并直接运行 exe 而不是通过 VS2010 运行时,我遇到了几个错误。这使得调试变得困难,因为无论我使用什么设置,我都无法在 VS 内部发生问题。

我是否遗漏了一些设置,还是在 VS2010 之外发生了更多我无法在 VS 2010 中模拟的事情?

我没有使用任何可能影响它的参数或环境变量,并且工作目录中的文件结构与源代码目录中的文件结构相同。

编辑:通过使用此处的信息附加到 exe 找到错误(未初始化的变量): 在调试器外部运行时发布构建更改行为

4

2 回答 2

2

Visual C++ 的调试器可以附加到已经运行的进程。(调试-> 附加到进程。)您可以尝试使用它在 Visual Studio 之外启动您的 exe,然后附加到它并调试错误。作为这样做的另一种方式,正如@Hans Passant 所建议的那样,您还可以添加__debugbreak();到您的进程中以强制 Windows 在您运行它时提供调试提示并以这种方式附加 Visual Studio 调试器。

我很想使用Process Monitor来比较调试器内部和外部的 exe 执行情况,看看它们在文件访问、DLL 加载等方面是否真的在做同样的事情。

有关类似问题,请参阅此问题。

于 2013-10-03T02:21:32.073 回答
1

两个想法立即浮现在脑海:
- 未初始化的变量
- 竞争条件。查看您的线程模型,并考虑锁定关键部分或变量访问。

于 2013-10-03T02:28:14.290 回答