Delphi:为什么断点不时可用(IDE上的绿色突出显示行)?

LaB*_*cca 30 ide delphi breakpoints delphi-xe

我不时会在Delphi中丢失断点功能.

我认为这是一个Delphi 2009问题,但现在我在Delphi XE中也有它.

在Delphi 2009中,通过删除.dproj文件,我使断点再次起作用.

在Delphi XE中,我无法显示破坏点.我有更新1应用了所有修补程序.

有没有人有办法解决吗?

Ken*_*ite 48

调试信息不​​存在于文件中.

确保您使用的是Debug配置.(Project Manager树,展开Build Configurations,确保Debug是粗体.如果不是,请右键单击DebugActivate从上下文菜单中选择.)确保然后执行项目构建,而不仅仅是编译.

如果仍然不起作用,请Project->Options从IDE的主菜单中,单击Compiling下面的Delphi Compiler,然后检查Debugging窗口右半部分.确保Debug Information并且Local Symbols都已选中.如果您正在尝试跟踪VCL自己的源代码,还要检查Use debug .dcus(您需要关闭它,并在完成后立即完成项目的完整构建,因为当您正常调试时会很烦人).再次,你将要构建而不是编译.

如果上述所有方法都失败了,另一种可能性是您在代码编辑器中打开的代码单元与编译器看到的代码单元不同.确保您的计算机上没有该文件的多个副本,而该位置是编译器可能首先找到的位置.如果您不确定,请删除具有该单位名称的.dcu文件,然后执行项目构建,并查看新创建的.dcu是否位于您期望的位置.

  • 我还可以补充说,如果它们不会被执行,可以跳过代码行.例如,如果在您从未调用的函数/过程中放置​​断点.此外,如果在"非可执行"代码行上放置一个断点,它将被标记为(例如:注释的代码行,"开始"或"结束"关键字). (4认同)

LaB*_*cca 21

我找到了更好的方法.

在项目管理器树中,右键单击项目,然后从弹出菜单中选择"清除".

断点重新出现,这是一种非常快速的方法.

  • 这不适合我.使用RAD-XE C++ Builder.这是自1.0以来一直存在的这个糟糕软件中的另一个愚蠢错误.我很抱歉几年前我被捆绑到了VCL.我打击这个工具比打击bug更多.我应该使用Visual Studio. (6认同)

Dav*_*nan 14

我怀疑当你完成发布版本并禁用调试时会发生这种情况.然后切换回调试配置并进行编译而不是构建.您无法设置断点的文件对应于具有禁用调试的编译生成的DCU的文件.

简单地进行构建以重新生成所有DCU文件将使您的断点再次起作用.

  • 有时手动删除所有生成的文件(dcu,bpl,dcp,...)是确保没有调试信息的文件在某些​​搜索路径中的某个地方徘徊的最快方法.然后完成重建.这帮助我不止一次快速解决了这个问题. (4认同)

Tom*_*erg 8

这是未对齐代码与断点标记(装订线中的蓝色/红色“药丸”)的另一个原因。

编辑器识别三种不同的行尾,

  • CRLF(回车 - 换行对)
  • 仅 CR
  • 仅低频

其中,CRLF是编辑器中的默认设置。

然而,编译器似乎并不认为CR only是行尾,只有CRLFLF only。因此,如果您的源文件恰好有一个或多个CR only,“蓝色药丸”将从源文件中偏移。

您可能CR only从 Internet 等处获得了带有EOL(行尾)字符的源文件。我记得用作CR onlyEOL 的MAC OS 。

要验证文件中的 EOL,您可以在编辑器中打开 EOL 的显示

( Tools - Options - Editor options - Source options - Show line breaks).

这些符号看起来很奇怪(见下图),但对于 CRLF,C 位于 L 之上,C 位于 R 之上,代表 CR,L 位于 F 之上,代表 LF。

下图显示了CRLF我在十六进制编辑器中强制CR only一行和LF only另一行后的正常 EOL ( ) 和 EOLS 。如上所述,它是CR only从源代码偏移断点标记的。

正常的CRLFEOL:

在此处输入图片说明

一行CR only和一行LF only

在此处输入图片说明

修复
要重置所有EOL对CRLF,勾去掉Preserve line endsEditor Options

( Tools - Options - Editor options),

进行微不足道的更改,以便将文件标记为已修改,关闭文件,将更改保存到 XYZ.pas?YES,并重新打开。
现在所有行结尾都是 CRLF。重建项目,所有断点球都将位于正确的位置。

  • 几年前,我在一次会议上与丹尼·索普 (Danny Thorpe) 交谈,他将这些点称为“球”。他解释说“只有当你有球时你才能调试”;-) (4认同)

fpi*_*tte 6

我和XE4有同样的问题.这就是我几个小时前发现这篇文章的原因.上述解决方案均不适合我.对我来说,正确的解决方案 - 到目前为止 - 是添加"远程调试符号"选项.奇怪,因为我不使用远程调试.无论如何它现在看起来还不错.


Hmb*_*ker 5

这是一个错误,重新启动 Delphi 将解决您的问题。


小智 5

启用远程调试符号对我来说是成功的(其他方法无效)。项目>选项>链接,然后选中包括远程调试符号。