Visual Studio 发布版本

Posted

技术标签:

【中文标题】Visual Studio 发布版本【英文标题】:Visual studio release build 【发布时间】:2009-06-22 00:00:47 【问题描述】:

我正在尝试为我编写的 C++ 应用程序生成发布版本。当您在 VS2008 中运行该应用程序时,它运行良好(调试和发布);但是当您运行可执行文件时,它几乎每次都会崩溃。

现在,是否有一个 hack,所以我可以将这个应用程序作为一个独立的应用程序运行,而不必运行所有代码并找到导致它的错误?

提前致谢。

【问题讨论】:

【参考方案1】:

简而言之,没有。

你必须找到这个错误,如果它在 VS 中工作,那么我会冒险猜测这是一个时间问题,可能你正在覆盖共享线程数据,这不太可能(尽管仍然有可能请参阅)在 VS 内部,因为它在调试环境中运行,这会减慢它的速度。

如果您需要帮助查找错误,请告诉我们更多信息。否则,使用调试符号 (pdbs) 构建您的版本,将 DrWatson 安装为系统调试器并独立运行。当它崩溃时 DrWatson 将创建一个 minidump 文件,将其加载到 WinDbg(我最喜欢的)中,您将能够准确地看到您的错误在哪里(它甚至会告诉您转储包含异常并默认显示它. 您需要在 WinDbg 中添加您的源代码路径和符号路径以使其正确执行此操作)。

然后您还将知道如何在应用程序在现场运行时诊断崩溃。

【讨论】:

在我们最终发现错误之前,我们在客户站点以调试模式运行了一个旧的 C++ 应用程序超过 6 年。缓冲区上的单字节溢出,在调试模式下由于某种原因它从来没有出现过问题。 原因是调试模式用一个 4 字节的“保护页”填充所有内存分配,因此很容易发现缓冲区溢出。 ***.com/questions/127386/…【参考方案2】:

您是否正在加载外部资源?如果您在 C++ 程序中检查您的相对路径是否正确。

【讨论】:

【参考方案3】:

一种可能性是您的程序使用了未初始化的堆数据。从调试器启动程序会启用 NT 调试堆,这会导致堆分配器使用填充模式填充新的内存块,并且还会启用一些堆检查。从调试器外部启动相同的程序会禁用 NT 调试堆,但如果该程序与 C 运行时的调试版本链接,则 CRT 调试堆仍将启用。

不太可能的可能性是您的程序需要在其进程令牌中设置SeDebugPrivilege。调试器在它的进程令牌中启用了这个权限,它的副作用是所有从调试器启动的程序都继承了这个权限。如果你的程序尝试使用OpenProcess()/ReadProcessMemory()/WriteProcessMemory()并且没有正确处理错误,那么它可能会崩溃。

【讨论】:

【参考方案4】:

有几种可能性。除了已经提到的内容之外,从 Visual Studio 运行应用程序将在与 Visual Studio 实例相同的安全上下文中执行。因此,例如,如果您正在使用 Vista,当您尝试访问受保护的文件或注册表时,您可能会遇到未处理的安全违规。

如果您构建一个调试版本并独立运行它会怎样?它会崩溃吗?如果是这样,您通常可以从那里闯入调试器并获取调用堆栈以查看故障所在。

【讨论】:

好的,那可能是一些未初始化的指针。您应该检查您的代码并确保所有内容都已初始化,所有指向 NULL 的指针等。和/或构建一个混合版本;所有启用调试符号的发布模式设置,看看你是否可以通过这种方式获得崩溃的调用堆栈。【参考方案5】:

根据您提供的详细信息,听起来可能存在库问题。您是否在同一台计算机上运行该程序?如果没有,那么您还必须为您的应用程序部署适当的库。如果您在同一台计算机上但在开发环境之外运行,请确保您的应用程序可以看到相应的库。

【讨论】:

应用程序在同一台计算机上运行;图书馆明智的应用程序应该没问题。【参考方案6】:

我发现在发布中进行调试的最佳方法是在发生崩溃时创建崩溃转储,然后转储允许我在我的开发计算机上加载调试符号并找出发生了什么。更多信息在这里:http://www.debuginfo.com/articles/effminidumps.html

【讨论】:

【参考方案7】:

您也可以在 Visual Studio 中转到 file => open 并打开 .exe,因此您不会在调试器本身下启动它。不知道会不会有帮助。

http://blogs.msdn.com/saraford/archive/2008/08/21/did-you-know-you-can-debug-an-executable-that-isn-t-a-part-of-a-visual-studio-project-without-using-tools-attach-to-process-296.aspx

【讨论】:

以上是关于Visual Studio 发布版本的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2013 中更改C#项目的 Framework 版本

使用以前版本的 Visual Studio 的 devenv 从 VS2017 测试 Visual Studio 扩展不起作用

Visual Studio 发布版本

Visual Studio 2015 添加发布版本号

(Visual Studio 杂记) )—— Visual Studio 如何 设置 C++ 标准版本

(Visual Studio 杂记) )—— Visual Studio 如何 设置 C++ 标准版本