Visual Studio 2012 仅发布错误
Posted
技术标签:
【中文标题】Visual Studio 2012 仅发布错误【英文标题】:Visual Studio 2012 Release only error 【发布时间】:2013-04-29 19:49:44 【问题描述】:这里发生了许多错误,但我确信它们都是链接的,所以首先我在位置(通常在 0x00000000 附近)遇到访问冲突读取位置异常 但我只在发布中得到这些异常,而不是在调试中,即使我设置调试这样做。我还发现了错误发生的位置,但是当我跨步时,它进入了一个完全不相关的函数,该函数未在该行或该代码行中的任何函数中调用。但是当调用类似的代码时,它仍然会转到这个不相关的函数,但不会失败。这一切都只发生在发布版本中。我知道哪段代码导致了错误,就好像我把它注释掉一样。同样在发布的监视窗口中,大多数时候所有数字都是错误的,这从来都不是问题,但它也可以帮助添加一些代码以将变量的值输出到文件并且变量都很好,指针是明智的,但是当异常发生时,它总是说它们的 0x00000020 但是当我查看日志时它们很好。这是 32 位的,但在 c++ 中的 64 位 windows 7 上。请任何帮助都会很好!
【问题讨论】:
如果您使用类似a[8]
(如果 sizeof(a[0]) == 4)和a
是NULL
之类的东西访问数组,那么您将在 0x00000020 处遇到访问冲突。查找未分配的变量。
谢谢,但没有什么不同,因为它似乎在变量的值方面也随机行事,一切都很好,然后它只是抛出异常,主要问题是代码太长了20000 行,错误似乎是代码的核心部分,但我需要的是一种处理错误的方法。代码的作用就像我正在调用指针为空的类的非静态函数。
对我来说仍然听起来像是一种竞争条件,两个线程接触一个变量。要么在设置之前读取它,要么设置然后在读取之前重置为 null。
再次不,我稍微更改了代码,以便它全部在一个线程上运行,但我仍然得到错误,无论如何那段代码和内存只真正涉及一个线程,所以它不可能真的是那个。
发布构建问题很难调试。从禁用优化器开始,这样您从调试器获取体面信息的麻烦就会减少。项目 + 属性、C/C++、优化、优化 = 禁用。
【参考方案1】:
Visual Studio 的调试器将导致程序使用调试堆,如果您在发布或调试中使用“Start with Debugging”选项启动程序,则该调试堆可以隐藏未初始化的内存。您可以尝试在没有附加调试器的情况下运行在 Debug 配置中构建的程序,然后使用调试菜单中的 Attach to Process... 选项附加到您的可执行文件。
如果这没有帮助,我建议使用windbg 来调试您的程序。如需帮助开始使用 windbg,请查看此 question 上的答案。
配置windbg并设置符号路径后,您可以在程序崩溃时使用“!analyze -v”选项自动获取有关崩溃的大量信息。
【讨论】:
我发现如果我在没有调试的情况下运行发布它运行良好,没有错误,我通常只是在调试的情况下运行发布,所以我没有注意到但为什么它不能在发布中调试模式。以上是关于Visual Studio 2012 仅发布错误的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2013 中可能存在的 C/C++ 编译器错误
visual studio 2012 启动出现如下错误,怎么处理
如何在 Visual Studio 2012 中编辑 s-s-rS 2008R2 报告?
在 Visual Studio 2010 和 Visual Studio 2012 中,带有 col、colgroup、tbody 和 thead 的 HTML 表格标记引发编译错误