【问题标题】:How do I stop the debugger from stepping into Delphi-supplied units?如何阻止调试器进入 Delphi 提供的单元?
【发布时间】:2012-08-22 13:30:58
【问题描述】:

调试器会在错误时进入源代码(例如使用 F7),但我想恢复正常工作模式,其中 Delphi 基本 DCU(库)仅编译到我的代码中,并且源不用于调试。

例如,在我的程序中出现错误时,调试器正在逐步进入 Controls.pas,进入 TControl.Click。通常情况下(安装后),Delphi 会跳过这些方法。

我应该在没有调试信息的情况下重新编译 Controls.pas 吗?如果有,怎么做?


我用附加信息扩展了这个主题,以便更好地理解:

我们使用 Delphi6 Prof. 鼠标有什么问题(系统错误代码 5)。 所以我们要重新编译到 Controls.pas 来替换 Mouse Position getter 代码。 那么:

  1. 我为它创建了一个文件夹:“c:\D\Common\Delphi_Patches\Delphi_6\”
  2. 我把原来的Controls.pas放进去。
  3. 我修改了 Controls.pas,替换了 position getter 代码。
  4. 我设置了Delphi的Library路径,将第一个文件夹设置为“c:\D\Common\Delphi_Patches\Delphi_6\”

通过这些步骤,我可以使用鼠标安全代码编译源代码。

好的,但是 Delphi 每次都会在 F7 上进入 Controls.pas,并且在任何例外情况下 - 这是非常“愤怒的人”的事情。

不管我从库路径中删除了“Controls.pas” - 然后调试器正在为它找到原始的“Controls.pas”,然后打开它...... :-(

我们不在任何代码中使用“使用调试 DCU-s”。

我试图从编译器选项中删除“调试信息”,但没关系,Delphi 是打开原始 Controls.pas...

所以我搜索Delphi的方式不要进入“Controls.pas”,而是使用我的dcu...

我希望这能提供更好的上下文来理解问题。

【问题讨论】:

  • 不确定我是否正确,但是如果您想在调试时进入Controls.pas,然后转到Project / Options 并找到与Use debug .dcus 相关的内容,保存选项并重新构建您的项目(不仅编译,重新构建)。然后你就可以进入系统单元了。
  • @TLama,我觉得问题是Use debug .dcus现在被勾选了,发帖人想停止插手。当然,你的评论还是对的,但是解决办法是取消选中 Use debug .dcus 复选框。 :-) 海报:当您在标签或文本中告诉我们您使用的是哪个 Delphi 版本时,它会有所帮助。
  • @Ken,或者问题在于即使对于新项目,此设置仍然存在(由 Default 复选框引起)。很难说...
  • 另一个可能的问题是 VCL 源代码对编译器可见(通过搜索路径),并且每次构建项目时都会重新编译。如果是这样,解决方案是在编译器选项中编辑搜索路径参数。
  • 回复:更新 - 将 {$D-} 放在修改后的 controls.pas 之上。

标签: delphi debugging dcu


【解决方案1】:

我认为您需要 Shift+Ctrl+F11(工具/选项)然后在 Compiler ,取消选中“使用调试DCU”...然后如果发生异常,它不会闯入RTL或VCL源。

【讨论】:

  • 在Delphi XE8中,此选项在“Delphi Compiler”下,选择“Compiling”,在右侧树上展开“Debugging”。
【解决方案2】:

由于您正在编译自己的 Delphi 单元版本,您可以禁用该单元中的调试信息。在相关单元的源代码中添加{$D-}

【讨论】:

  • 似乎此页面中的答案和 cmets 无法到达 OP。问题更新后立即评论了相同的内容,但没有效果。
  • @SertacAkyuz 啊,你确实做到了。我没有看到它,因为它被隐藏了(添加/显示 1 条评论)。接受的答案很奇怪!
【解决方案3】:

我认为解决方案是:

  1. 创建一个仅使用新 Controls.pas 的项目。

  2. 取消设置编译器选项中的“调试信息”选项。

  3. 构建 dcu

  4. 将 dcu 放入库文件夹

  5. 从这个库文件夹中隐藏新的 Controls.pas。

记住这个技巧,我无法“进入”controls.pas。

问候:dd

【讨论】:

  • 这比它需要的复杂得多。看我的回答。
【解决方案4】:

我在使用 Delphi XE8 时遇到了同样的问题。

您可以取消勾选“项目>>选项>>编译>>使用调试.dcus”,它将继续跟踪到系统单元等等。

我发现阻止这种情况的最佳方法是打开您的 Application.dproj 文件——它是 XML 格式的。在其中,您可以按如下方式更改设置:

<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
    <DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime>  <--- note false
    <DCC_DebugDCUs>false</DCC_DebugDCUs>
    <VerInfo_Locale>1033</VerInfo_Locale>
    <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
    <DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 2019-06-20
    • 1970-01-01
    • 2012-08-13
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多