如何停止调试器进入Delphi提供的单元?

5
调试器会在错误(如按下F7)时步入源代码,但我希望恢复正常工作模式,即将Delphi基本DCUs(库)仅编译为我的代码,并且在调试时不使用源代码。
例如,在程序错误时,调试器会进入Controls.pas,进入TControl.Click。正常情况(安装后)是Delphi跳过这些方法。
我应该重新编译没有调试信息的Controls.pas吗?如果是这样,怎么做?
扩展主题,提供更多信息以便更好地理解:
我们使用Delphi6 Prof.它有一个与鼠标相关的问题(系统错误代码5)。因此,我们想重新编译Controls.pas以替换鼠标位置获取器代码。
然后:
1.我为此创建了一个文件夹:"c:\D\Common\Delphi_Patches\Delphi_6\"。 2.我把原始的Controls.pas放进去。 3.我修改了Controls.pas,替换了位置获取器代码。 4.我设置了Delphi的库路径,将第一个文件夹设置为"c:\D\Common\Delphi_Patches\Delphi_6\"。
通过这些步骤,我可以编译出带有安全鼠标代码的源代码。
但是,每次按下F7或遇到任何异常时,Delphi都会进入Controls.pas,这非常让人生气。
不管我从库路径中删除了"Controls.pas",调试器仍会找到原始的"Controls.pas"并打开它... :-(
我们在任何代码中都不使用"Use Debug DCU-s"。
我尝试从编译器选项中删除"调试信息",但无论如何,Delphi都会打开原始的Controls.pas...
所以我寻找一种方式让Delphi不要进入"Controls.pas",而是使用我的dcu...
希望这提供更好的上下文来理解问题。

1
不确定我是否理解正确,但如果您想在调试时进入 Controls.pas,则转到 项目/选项 并查找与 使用调试 .dcus 相关的内容,保存选项并重新构建项目(不仅是编译,而是重新构建)。然后您就可以进入系统单元。 - TLama
2
@TLama,我认为问题在于现在选中了“使用debug .dcus”,而帖子发布者想要停止跟踪。当然,你的评论仍然是正确的,但解决方案是取消选中“使用debug .dcus”复选框。:-) 发布者:如果您在标签或文本中告诉我们您正在使用哪个Delphi版本,将会有所帮助。 - Ken White
@Ken,或者问题在于这个设置即使对于新项目也会持续存在(由Default复选框引起)。很难说... - TLama
2
另一个可能的问题是VCL源代码通过搜索路径变得可见,并在每次构建项目时重新编译。如果是这样,解决方案是编辑编译器选项中的搜索路径参数。 - kludg
对于库路径,不管设置如何,在调试DCUs中始终缺失。他还能够在调试期间修改一些VCL源代码,现在编译器拒绝原有的DCUs并重新编译所有相关单元。这也发生在我身上 :-)但我认为最明显的事情 - 被遗忘的复选框 - 是原因。@TLama-去发表答案并检查它。你经常在评论中放答案而没有得到提示。 - Arioch 'The
1
回复:更新 - 将{$D-}放在您修改过的controls.pas文件的顶部。 - Sertac Akyuz
4个回答

10
我认为您需要按下Shift+Ctrl+F11(工具/选项),然后在编译器中取消选中“使用调试 DCU”...然后,如果发生异常,它将不会打断RTL或VCL源代码。

1
在 Delphi XE8 中,此选项位于“Delphi 编译器”下,选择“编译”,并在右侧树形菜单中展开“调试”。 - rkawano
在Delphi 10.4中,该选项位于项目|选项构建> Delphi编译器> 编译> 调试下。 - undefined
谁让EMB上的那个喝醉了的家伙默认启用这个f选项,我真是不理解。 - undefined

4

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


1
似乎这个页面上的答案和评论无法到达OP。在问题更新后立即发表了相同的评论,但没有效果。 - Sertac Akyuz
@SertacAkyuz 哦,确实是你发了评论。我没看到它,因为它被隐藏了(添加/显示1条评论)。被接受的答案相当奇怪! - David Heffernan

2
我认为解决方案如下:
  1. 创建一个只使用新的 Controls.pas 的项目。

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

  3. 生成 DCU 文件。

  4. 将 DCU 文件放入库文件夹中。

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

通过这个技巧,我就无法 "step into" controls.pas 了。
致敬:dd

这比它需要的要复杂得多。请看我的答案。 - David Heffernan

0

我在 Delphi XE8 中遇到了同样的问题。

你可以取消选中 "项目 >> 选项 >> 编译 >> 使用调试 .dcus",这样就可以继续跟踪 System 单元等。

我发现最好的方法是打开你的 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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接