【问题标题】:What can cause an abnormal program termination?什么会导致程序异常终止?
【发布时间】:2009-12-17 22:36:59
【问题描述】:

MFC 应用程序(使用 SQLite3.dll 进行 DB 访问,以及使用其他 DLL 访问硬件)异常终止。没有特定的终止顺序:( 我的申请是一个

  1. 单线程应用程序
  2. 使用异常处理
  3. 使用超过 6 个 DLL 来访问不同的硬件
  4. 在 WinXP SP2 上运行

一开始我以为可能是堆栈溢出,后来发现不是。有人能告诉我程序异常终止的所有一般原因是什么吗?如果有人遇到过类似的问题,或者有任何提示或线索,请转发。

提前致谢

【问题讨论】:

  • 你试过通过调试器运行它吗?
  • 您能否在调试器中运行程序并提供崩溃的堆栈跟踪和/或 Visual Studio 输出框中的文本?也尝试在调试模式下构建,看看你是否得到任何断言。
  • ...或者至少是正在执行的代码。
  • 是的,我尝试在调试模式下重新创建它,它似乎没有异常终止。只有在发布模式下才会发生。
  • 您也可以尝试在发布版本中添加调试符号。这应该仍然会重现崩溃,但希望您能在它发生时获得堆栈跟踪。

标签: c++ mfc termination


【解决方案1】:

一般来说,崩溃的一般原因是:

  • 读取不属于你的内存
  • 写入不属于你的内存
  • 除以零
  • 在中断中做一些你不应该做的事情
  • free()一个指针不止一次

也可能:

  • 有一个未经处理的异常
  • 在您的 MFC 中发现错误
  • 您的 >6 个硬件访问 DLL 正在执行上述任何操作
  • 您遇到了某种硬件故障

也许您将错误的缓冲区传递给您的硬件 D​​LL,或者忘记锁定一些内存,或者您甚至可能在 DLL 和它们的标头之间存在版本不匹配。

有很多选择:P

【讨论】:

    【解决方案2】:

    由于这是一个运行时问题,我建议您将调试语句发送到日志文件。包括函数名称,也许还有时间戳。写入文件后始终刷新输出缓冲区,因为这提供了在异常发生之前将最后一行写入文件的更好概率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多