我有一个问题,我正在尝试调试,只有当我运行直接在Visual Studio外部构建的release 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来找到错误(未初始化的变量): Release build changes behavior when run outside of the debugger
答案 0 :(得分:2)
Visual C ++的调试器可以附加到已经运行的进程。 (调试 - >附加到进程。)您可以尝试使用它在Visual Studio外部启动您的exe,然后附加到它并调试错误。作为另一种方法,正如@Hans Passant建议的那样,您还可以将__debugbreak();
添加到您的进程,以强制Windows在您运行它时提供Debug提示并以这种方式附加Visual Studio调试器。
我很想使用Process Monitor来比较调试器内部和外部exe的执行情况,看看它们是否真的在文件访问,DLL加载等方面做了同样的事情。
有关类似问题,请参阅this question。
答案 1 :(得分:1)
立即想到两个想法:
- 未初始化的变量
- 竞争条件。查看您的线程模型,并考虑锁定关键部分或变量访问。