64位exe在视觉工作室外崩溃,但在视觉工作室内工作

时间:2013-07-02 19:14:18

标签: c++ windows visual-studio 64-bit

我使用freeglut,optix,cuda和其他库(其中一些是dinamically loaded)编译了一个程序。它在Visual Studio中编译和运行没有问题,但如果我在Visual Studio外部执行它会崩溃。发布版本和调试版本都在VS中运行,如果我尝试直接执行它们,它们都会在Windows 8上没有任何信息而崩溃。

我已经包含了所有必要的DLL,但是没有用。

可能是什么问题?

4 个答案:

答案 0 :(得分:3)

大多数此类观察通常来自未定义的行为 - 使用未初始化的变量,悬空指针/引用,超越缓冲区。

您可以尝试使用Application Verifier,幸运的是它可能会重新排列已用内存,足以让您在调试时触发问题以帮助解决问题。

此外,当它崩溃时,你应该得到启动VS的提示并检查问题 - 它是否表示没有提示?崩溃的直接原因是什么,以及你在那里的调用堆栈上有什么?

答案 1 :(得分:2)

您可以尝试比较visual studio和默认环境之间的环境。

Dependency walker应该识别任何丢失的DLL。

答案 2 :(得分:2)

获取WinDBG,然后获取文件>打开Executable并在WinDBG下运行该程序。当它崩溃时,您将获得更多信息。 My answer here描述了.net中的一个问题,但该概念也适用于原生C ++。

答案 3 :(得分:1)

Visual Studio在“调试”模式下运行可执行文件,这意味着存在调试器。

这是什么意思?如果你检查了msvcrt实现,如果运行时检测到存在调试器(IsDebuggerPresent),那么就会以不同方式进行预编译。

这是什么意思?这意味着缓冲区大小向上“轻推”,这意味着默认情况下擦除内存分配(不需要memset)等。

这可能会导致各种错误出现,或者隐藏一些更微妙的错误。