2013-10-03 52 views
2

之外运行EXE时,我有我试图调试,只有当我直接运行内置的Visual Studio之外释放的exe发生的问题出现。当我在Visual Studio中执行它时,即使使用特定的项目属性来调试“发布”版本(例如开启优化),该程序也可以正常运行,如下页所述。版本的bug只的Visual Studio

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

我体验到使用这些设置和运行/调试没有问题,从withing VS,但是当我复制的exe和需要的文件(图像和一些DLL),以它自己的目录,并运行exe文件,而不是直接通过VS2010我遇到了一些错误。这使得很难调试,因为无论我使用什么设置,VS都不会发生问题。

我失去了一些设置或还有更多的事情VS2010,我不能从内VS 2010的模拟不同之外这种情况发生?我没有使用,可能是影响它,并从工作目录中的文件结构中的任何参数或环境变量

等同于它在源代码目录的方式。

编辑: 实测值通过这里使用的信息附加到的exe臭虫(未初始化的变量): Release build changes behavior when run outside of the debugger

+1

“情侣错误的”你躲避到可能会相当算命。也许包括那些。 – WhozCraig

+0

在你的main()函数中放入'__debugbreak();'。 –

+0

只需确认一下:您的常规发布版本会打开所有优化,对吗? (通过尝试调试发布版本,则通常添加调试符号和较低的编译优化),你看到 什么样的错误?致命的? – Raja

回答

2

的Visual C++的调试器可以连接到已经运行的进程。 (调试 - >附加到进程。)你可以尝试使用它在Visual Studio之外启动你的exe,然后附加到它并调试错误。至于这样做的另一种方式,因为@Hans帕桑特建议,也可以加__debugbreak();到你的进程强制Windows提供了一个调试提示,当你运行它,并附加Visual Studio调试器的方式。

我会尝试使用Process Monitor exe文件的执行内部和外部比较调试器,看看他们真正在做同样的事情,至于文件访问,加载DLL等

有关类似问题,请参见this question

+0

原因是未初始化的变量。我发现这是由于您的解决方案附加到流程中。奇怪的是,如果变量从VS内部运行时将被初始化,即使您打开了优化。我忘了我可以附加到调试过程。谢谢。 – enr4ged

1

两个念头立即回想起来:
- 未初始化的变量
- 竞争条件。看看你的线程模型,并考虑锁定关键部分或变量访问。