代码之家  ›  专栏  ›  技术社区  ›  Charles

VisualStudio发布版本

  •  0
  • Charles  · 技术社区  · 15 年前

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

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

    7 回复  |  直到 15 年前
        1
  •  6
  •   gbjbaanb    15 年前

    简言之,没有。

    您必须找到这个bug,如果它在VS中工作,那么我会冒险猜测这是一个计时问题,可能是您正在覆盖共享线程数据,这在VS中的可能性较小(尽管仍然可能看到),因为它在调试环境中运行,这会使它的速度减慢一点。

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

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

        2
  •  1
  •   PowerApp101    15 年前

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

        3
  •  1
  •   bk1e    15 年前

    使用未初始化的堆数据

    不太可能的情况是您的程序 要求 SeDebugPrivilege 要在其进程令牌中设置 . 调试器在其进程令牌中启用此权限,其副作用是从调试器启动的所有程序都继承此权限。如果您的程序试图使用 OpenProcess() / ReadProcessMemory() / WriteProcessMemory() 如果不能正确处理错误,它可能会崩溃。

        4
  •  0
  •   Gerald    15 年前

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

        5
  •  0
  •   nathan    15 年前

        7
  •  0
  •   Mark Sowul    15 年前

    您也可以转到file=>在Visual Studio中打开并打开.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