1

我使用 freeglut、optix、cuda 和其他库(其中一些是动态加载的)编译了一个程序。它在 Visual Studio 中编译和运行没有问题,但如果我在 Visual Studio 之外执行它会崩溃。发布和调试版本都在 VS 中工作,如果我尝试直接执行它们,它们都会在没有任何 Windows 8 信息的情况下崩溃。

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

可能是什么问题呢?

4

4 回答 4

3

大多数这样的观察通常来自未定义的行为——使用未初始化的变量、悬空指针/引用、溢出缓冲区。

您可以尝试使用应用程序验证程序,如果运气好的话,它可能会重新排列已使用的内存,足以让您在调试下触发问题以帮助解决问题。

此外,当它崩溃时,您应该得到启动 VS 并检查问题的提示——它不是表示提示吗?崩溃的直接原因是什么?你在调用堆栈上有什么?

于 2013-07-02T19:32:21.330 回答
2

获取WinDBG,然后 File > Open Executable 并在 WinDBG 下运行程序。当它崩溃时,您将获得更多信息。我在这里的回答描述了 .net 中的一个问题,但这个概念也适用于本机 C++。

于 2013-07-02T19:40:44.573 回答
2

You can try comparing the environments between visual studio and the default environment.

Dependency walker should identify any missing DLLs.

于 2013-07-02T19:26:19.497 回答
1

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

这是什么意思?如果您检查 msvcrt 实现,如果运行时检测到存在调试器 (IsDebuggerPresent),那么堆会以不同的方式执行。

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

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

于 2013-07-02T20:13:13.920 回答