【问题标题】:C++ Builder: Abnormal program termination. How to investigate?C++ Builder:程序异常终止。如何调查?
【发布时间】:2017-03-23 09:02:41
【问题描述】:

我正在尝试将在以前版本的 C++Builder 中完成的项目移动到 10.1 Berlin(我正在使用 C++Builder 的试用版)。

项目已成功转换和编译,只需很少的努力。然后我得到了众所周知的链接器LME288问题,但是通过以管理员身份启动C++Builder解决了。

但是现在,当我启动应用程序时,一开始我会收到一个消息框,上面写着“程序异常终止” - 甚至在主窗口出现在屏幕上之前。

在 IDE 和独立版本中,调试版本和发布版本的情况相同。当我在 IDE 中启动程序并在第一条语句处设置断点时,错误消息出现在该语句之前。

我有 64 位 Windows 10 专业版。 C++Builer 10.1 柏林试用版。它显示唯一可访问的平台是 Win32,但我不知道这是否是错误的原因。该程序在以前的版本中运行良好。

谁能告诉我该怎么做?是否有系统的方法来调查问题?

我已经尝试了所有我能找到的建议 - 使用调试器、向我们展示代码、尝试重新安装软件或 Windows、升级到最新更新等。但我从未见过系统化的方法。

【问题讨论】:

  • 当您在调试器中运行项目时,它实际上向您显示了什么?你的断点显然执行的太晚了,但是调试器还是应该看到失败的发生,并且特别报告失败的内存地址,让你调试进程,查看调用堆栈,CPU寄存器等。@ 987654321@/WinMain()不是EXE运行的第一个代码。
  • @Remy 我的错误 - 似乎我按下了“不带调试器运行”(绿色箭头)而不是“运行”。现在我看到调试器注释:“项目引发异常类 EReadError 并带有消息‘读取 TreeView.Indent 时出错:系统错误。代码:1410。类已经存在’。不过仍然不明白原因。到目前为止,发现了一个建议,即从旧项目到新项目的自动转换不正确。是否考虑到编译和链接成功?
  • 那个错误没有意义。 EReadError 是一个 DFM 流错误,但 Indent 属性只是一个整数,它不应该对类做任何事情。并且错误 1410 是 ERROR_CLASS_ALREADY_EXISTS,这不是 DFM 流系统无论如何都会抛出的,因为它在流期间没有注册类。同样,我建议您使用调试器查看调用堆栈并找到导致错误的代码。
  • 如果您在 IDE 中安装了 CodeGuard,请尝试打开它(不确定您是否得到它,我的 BDS2006 有)它会在出现第一个错误时停止(而不是崩溃),这样您就可以看到实际发生的情况但它不适用于大型项目......因为它很慢并且通常会溢出内存使用......我敢打赌你有一些令人讨厌的内存泄漏或 const 字符串指针算术错误(那些让我为移植项目烦恼很多)这些通常在表单创建之前开始。
  • @Remy CodeGuard 已开启。主文件中的语句发生错误:'Application->CreateForm(__classid(TACartDialog), &ACartDialog);'

标签: c++builder


【解决方案1】:

为了使我的项目正常运行,我必须做几件事。

1) 开始一个新项目。由于某种原因,旧项目可能会损坏并产生奇怪的错误。我建议开始一个新项目并将文件添加到其中。 2) 使用旧版本的 borlndmm.dll C++ Builder 10 提供的版本对我来说产生了没有意义的崩溃。我用来自 XE6 或 XE8 的副本覆盖了提供的 borlndmm.dll 副本。这解决了我的问题。

希望其中之一对您有所帮助。

【讨论】:

  • 每次升级 C++Builder 版本都新建一个项目,避免了很多奇怪的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 2015-11-22
相关资源
最近更新 更多