【问题标题】:Delphi, Debug initialization sectionDelphi,调试初始化部分
【发布时间】:2011-03-28 20:58:27
【问题描述】:

我的问题是系统的某些部分引发了异常,但它发生在初始化期间,我无法弄清楚它在哪里或是哪个异常。系统刚开始运行,然后突然关闭。

你有什么方法可以调试这种情况吗?

我用的是Delphi5,以防万一。

【问题讨论】:

  • 你有问题的机器上安装了 Delphi 吗?
  • 是的,我用delphi运行系统,但是我用的是Delphi5,我认为这很重要。
  • 确保您已选择调试 DCU。打开 \Source\Rtl\Sys\System.pas。找到 InitUnits。在开始时设置一个断点。看你打不中。从那里开始,直到找到问题为止。

标签: delphi debugging delphi-5


【解决方案1】:

下载MadExcept。它适用于 Delphi 5,可免费用于非商业用途(并且对于商业用途而言绝对物超所值),并且非常适合追踪各种神秘异常。

【讨论】:

  • 非常感谢,似乎是一个很棒的工具。但是当我尝试使用 madExcept 重新编译我的项目时,它给出了这个错误:[Fatal Error] Project1.dpr(10): Unit madTools was compiled with a different version of Windows.GetVersionExW 你已经看到了吗?
  • 您需要确保在安装 Mad* 文件时正确设置了搜索路径。您会找到 .dcus 的 Delphi 2009-Delphi XE 版本,而不是 Delphi 5 版本。恐怕我对 Delphi 5 帮不上什么忙;我现在可能有近十年没有使用它了。您是否尝试过 Mathias 提供的 support forums 或新闻组(news://news.madshi.net)? (抱歉 - 无法让 news:// 链接正常工作。)
  • 您是否正在构建自己的 vcl?
  • @David Heffernan:确实,我们有自己的 vcl 版本,我们公司购买了进行更改的权利。但是有些东西是我们不知道的,比如 system.pas 和一些核心资源。
【解决方案2】:

使用 F7(步入)命令启动应用程序,这将跳转到第一个单元初始化...然后您可以使用 F7 F8 像往常一样调试任何单元初始化部分,直到找到异常的来源。

调试初始化有时是一项乏味的工作...在您取得进展的同时,您可以在初始化部分中放置常规断点以从已知点重新开始。

【讨论】:

  • 我对此有疑问。我使用的是delphi 5,所以我无法通过F7调试init部分,因为Delphi5只是通过消耗100%的CPU而停止运行。
  • @JeanK IIRC 这适用于任何 Delphi 版本,我从 Turbo Pascal 过去就使用了这种技术......也许你使用了很多单位,在这种情况下等待一段时间让 Delphi IDE打开相关的对我来说很有意义。
  • 是的,它的真实,遗留系统是巨大的。感谢您的帮助。
【解决方案3】:

在使用那些公认的答案(调试器工具)后,您是否得到/找到了问题所在?您是否使用需要一些 DLL 的库/组件?根据我的经验(没有出现异常并且应用程序突然关闭);这是因为您的某些东西无法加载 DLL。该异常不会在调试模式下显示,但会在您运行应用程序时出现(而不是在 debug-Delphi 中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2011-07-29
    • 2016-02-22
    • 1970-01-01
    • 2014-07-27
    相关资源
    最近更新 更多