如果调试运行正常,该怎么办,但释放崩溃

我有一个在调试版本中运行得很好的应用程序,但是当我在发布版本中启动它时,我得到了一个

unhandled Exception at 0x0043b134 in myapp.exe: 0xC0000005:
Access violation while reading at position 0x004bd96c

如果我点击'break',它会告诉我没有加载符号,并且无法显示源代码。

在这种情况下我能做些什么来追踪问题?


这种问题通常是由于单位变量。 我会从那里开始寻找你的问题。

调试模式更加宽容,因为它通常配置为初始化尚未明确初始化的变量。

也许你正在删除一个单位化的指针。 在调试模式下,它的工作原理是指针无效,并且在NULL上删除ptr就可以了。 在释放它是一些垃圾,然后删除ptr实际上会导致一个问题。


这可能是两件事:

  • 除了检查本身之外,您的一个或多个断言确实需要工作
  • 别的东西
  • 要排除前者,请尝试在调试版本中将assert重新定义为空操作。 如果没有某个断言导致崩溃,你会看到它。 否则,这是别的。

    另外,我假设你有版本控制。 这是否刚刚开始? 您可以分析上周的代码更改。

    最后,即使在调试模式下没有崩溃,运行内存检查器工具可能会发现不正确的内存访问。


    两个步骤:

    a)使用调试符号构建发行版本(至少可以使用VS)

    b)构建发布版本而不进行优化

    如果问题仍然存在,那就很好,很容易解决。 这就好像问题出现在调试版本中一样。

    如果问题发生在优化设置上,那么这非常困难,必须以具体情况处理。

    链接地址: http://www.djcxy.com/p/82301.html

    上一篇: what to do if debug runs fine, but release crashes

    下一篇: multiple calls to realloc() seems to cause a heap corruption