【问题标题】:The program has unexpectedly finished程序意外结束
【发布时间】:2013-12-21 05:15:03
【问题描述】:

在 Qt Creator 中运行发布版本时收到以下错误消息:

The program has unexpectedly finished.
.....exe exited with code -1073740791

在调试器中以调试模式成功运行。在另一个线程中发现这是

0xc0000409 = STATUS_STACK_BUFFER_OVERRUN

错误。程序和 Qt 是用 VS C++ 构建的。问题可能出在哪里?还是我应该运行一些分析器来检查内存访问?

【问题讨论】:

  • 首先使用以下选项构建您的代码:“将警告视为错误”(在 gcc 中为“-Wall”)以捕捉任何愚蠢的问题。

标签: qt visual-c++ qt-creator


【解决方案1】:

当程序在调试时运行,但在发布时崩溃,这往往是由于未初始化的变量。调试构建,尤其是使用调试器运行,可能会在使用前为您清除内存,因此它可以隐藏问题。我建议您首先检查未初始化的变量。

如果您真的卡住了,请更改配置以构建发布版本的调试符号,然后在崩溃时附加调试器并查看代码在做什么。

或者,在代码中的不同位置使用qDebug 将调试文本打印到控制台,看看您是否能确定问题出在哪里。

【讨论】:

  • 没有找到未初始化的变量。无法附加调试器,因为它立即退出。我添加了 std::cerr
  • 您可以尝试在 main 函数的开头放置一个中断代码。在 gcc/clang 中是: __asm__("int $3"); VSC++ 的语法可能略有不同。一旦中断被击中,您就可以附加调试器。这里有更多相关信息:stackoverflow.com/questions/37299/…
  • 似乎它甚至没有进入 main()。奇怪:完全清理/重建后,现在在一台机器上工作正常,在另一台机器上仍然失败。
  • 检查系统日志,看看是否有任何线索说明出了什么问题。
  • 调试器显示它在 QtXml4!QDomNode::toElement 中失败。但为什么它在调试中没有失败?!试图输出跟踪到日志,仍然没有信息...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多