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

Delphi:为什么断点有时不可用(IDE上的绿色突出显示行)?,delphi,ide,breakpoints,delphi-xe,Delphi,Ide,Breakpoints,Delphi Xe,有时我会丢失Delphi中的断点功能 我原以为这是Delphi 2009的一期,但现在我在Delphi XE中也有了它 在Delphi2009中,通过删除.dproj文件,我使断点再次工作 在Delphi XE中,我无法使breakpints出现。我已经应用了所有修补程序的更新1 有人有解决方案吗?我怀疑当您在禁用调试的情况下完成发布构建时会发生这种情况。然后切换回调试配置并进行编译而不是构建。无法设置断点的文件对应于禁用调试的编译生成的DCU文件 只需重新生成所有DCU文件即可使断点再次工作。

有时我会丢失Delphi中的断点功能

我原以为这是Delphi 2009的一期,但现在我在Delphi XE中也有了它

在Delphi2009中,通过删除.dproj文件,我使断点再次工作

在Delphi XE中,我无法使breakpints出现。我已经应用了所有修补程序的更新1


有人有解决方案吗?

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


只需重新生成所有DCU文件即可使断点再次工作。

调试信息不在文件中

确保您正在使用调试配置。(
Project Manager
树,展开
Build Configurations
,确保
Debug
为粗体。如果不是粗体,右键单击
Debug
,然后从上下文菜单中选择
Activate
)确保随后对项目执行构建,而不仅仅是编译

如果仍然不起作用,请从IDE的主菜单转到
Project->Options
,单击
Delphi编译器
下的
编译
,并检查窗口右半部分的
调试
部分。确保同时选中了
调试信息
本地符号
。如果您试图跟踪VCL自己的源代码,请同时选中
使用debug.dcus
(您需要关闭此选项,并在完成后立即对项目进行完整构建,因为在正常调试时会变得很烦人)。同样,您需要构建而不是编译

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

我找到了一种更好的方法

在项目管理器树中,右键单击项目并从弹出菜单中选择“清理”


断点神奇地重新出现,这是一种非常快速的方法。

我遇到了一个相关的问题:我在一个特定的文件中丢失了断点,但其他文件没有问题。发生的事情是,我已经重命名了该文件,但我不知道旧文件的DCU仍在使用,因为它在某个地方的“uses”子句中被引用


解决方案是手动删除所有DCU(仅执行“清理”是不够的,因为DCU表示的旧文件已不在项目中)并重新生成。您将得到一个显示错误的“uses”子句的编译错误。

断点不工作的另一个原因可能是(通常使用delphi5测试):
一个单元中的程序太多。

解决方法是将程序移动到另一个单元

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

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

在我的例子中,我在一个单元中设置了断点,而在IDE中打开该单元时,它不是当前活动项目的一部分。此类断点也显示为绿色。瞧,我根本没上对的那一页


(我是在尝试了以上所有方法后发现的。)

在Delphi7中,设置断点似乎有一个真正的错误

我有一个单元,在这个单元中,许多文本在一个

const constname:记录类型为(…)的数组[0..x]

在接口部分,其中记录类型有一些AnsiString项。 在实施部分有一些程序

在某些特定情况下,当我在过程中的任何位置设置断点时,delphi不会停止

备注:调试的所有选项均已正确设置(对于F7,delphi会在程序的“开始”处停止,整个装置中可见蓝色圆点,执行应用程序时,该线保持红色),所有具有相应PAS文件的DCU均已从我的所有磁盘和所有文件夹中删除,在我完成整个项目之前。所以世界上的任何文件都不应该挂在任何地方。 为了进行测试,我将PAS重命名为另一个名称,以前从未使用过,在任何磁盘上肯定没有其他名称,然后调整所有源代码并重新编译,只是为了确保delphi和我查看的是同一个PAS文件,但断点也不起作用

但是发生了另一件非常奇怪的事情:文本常量(!)在我的可执行文件中发生了变化(不是在exe文件中,而是在内存中)!这些文本在程序启动时被检查是否正确,有时它会抱怨错误!在消息框中显示的文本显示,该文本中有一个sinlge字符被更改,该字符被定义为const。对于测试,我尝试在代码中为常量赋值,但正如预期的那样,编译器抱怨,所以不能是普通赋值导致文本的更改。一定是指针错了。奇怪

因此,接下来进行了数小时的测试,寻找可能设置了错误指针的源代码,这些错误指针可能会导致文本常量中的更改。我将messagebox放在我可以编辑的单元初始化链中第一个单元的初始化部分,但是更改的字符已经在那里了!必须在启动我的应用程序的早期进行更改,然后

最后我发现,出现的字符