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

| 我不时会在Delphi中失去断点功能。 我以为这是Delphi 2009的问题,但现在在Delphi XE中也有。 在Delphi 2009中,通过删除.dproj文件,使断点再次起作用。 在Delphi XE中,我无法显示Breakopints。我已应用所有修复程序的更新1。 有没有人有办法解决吗?     
已邀请:
文件中没有调试信息。 确保您使用的是Debug配置。 (
Project Manager
树,展开
Build Configurations
,确保
Debug
是粗体。如果不是,请右键单击
Debug
,然后从上下文菜单中选择
Activate
。)确保您然后对项目进行构建,而不仅仅是编译。 如果仍然不起作用,请从IDE的主菜单转到
Project->Options
,单击
Delphi Compiler
下的
Compiling
,然后检查窗口右半部分的
Debugging
部分。确保同时勾选了
Debug Information
Local Symbols
。如果您想追溯到VCL自己的来源,还请选中ѭ11(您想关闭它并在完成后立即对项目进行完整构建,因为它会正常调试时很烦)。同样,您将要构建而不是编译。 如果以上所有方法均失败,则另一种可能性是您在代码编辑器中打开的代码单元与编译器看到的不是相同的。确保您的计算机上没有该文件的多个副本,该位置可能是编译器最先找到的位置。如果不确定,请删除具有该单元名称的.dcu文件,然后构建您的项目,并查看新创建的.dcu是否在您期望的位置。     
我找到了更好的方法。 在项目管理器树中,右键单击该项目,然后从弹出菜单中选择\“ Clean \”。 断点会神奇地重新出现,这是一种非常快速的方法。     
我怀疑在禁用调试的情况下完成发行版本时会发生这种情况。然后,您切换回调试配置并进行编译而不是构建。无法设置断点的文件与禁用了调试的编译产生的DCU的文件相对应。 只需进行重新生成所有DCU文件的构建,即可使您的断点再次起作用。     
我对XE4有同样的问题。这就是为什么几个小时前我发现这篇文章的原因。以上解决方案均不适用于我。到目前为止,对我来说正确的解决方案是添加“远程调试符号”选项。奇怪,因为我不使用远程调试。无论如何,现在看起来还可以。     
启用远程调试符号对我来说是成功的(其他方法无效)。项目>选项>链接,然后选中包括远程调试符号。     
这是代码未对齐与断点标记(装订线中的蓝色/红色\“ pill \”)未对齐的另一个原因。 编辑器识别出三个不同的行尾, CRLF(回车-换行对) 仅CR 仅LF 其中,
CRLF
是编辑器中的默认值。 但是,编译器似乎并不将ѭ13视为行尾,而仅将
CRLF
LF only
视为行尾。因此,如果您的源文件碰巧有一个或多个
CR only
,则“蓝色药丸”将从源文件中偏移。 例如,您可能已经获得带有
CR only
EOL(行尾)字符的源文件。互联网。我记得MAC OS将ѭ13用作EOL。 要验证文件中的EOL \,可以在编辑器中打开EOL \的显示
( Tools - Options - Editor options - Source options - Show line breaks)
。 这些符号看起来很奇怪(请参见下图),但对于CRLF,它们仅在L的C上,对于CR而言,C在R的顶部上,对于LF而言,L在F的顶部上。 下图显示了在十六进制编辑器中我在一行中强制
CR only
并在另一行强制
LF only
之后正常的EOL(
CRLF
)和EOLS \。如上所述,是使断点标记与源代码发生偏移的“ 13”。 正常的
CRLF
终止销售价格: 一行与
CR only
和with15ѭ一起: 固定 要将所有EOL重置为
CRLF
,请取消选中
Editor Options
中的
Preserve line ends
( Tools - Options - Editor options)
, 进行微不足道的更改,以便将该文件标记为已修改,关闭文件,将更改保存到XYZ.pas?是的,然后重新打开。 现在所有行尾均为CRLF。重建项目,所有断点将位于正确的位置。     
我有一个相关的问题:我在特定文件中丢失了断点,但其他文件都没问题。发生的事情是我已经重命名了该文件,但是我不知道旧文件的DCU仍在使用,因为在某个地方的“ uses \”子句中引用了该文件。 解决方案是手动删除所有DCU(仅凭DCU所代表的旧文件已不在项目中,仅执行\“ clean \\”)并重新生成。您将看到一个编译错误,显示错误的“ uses”子句。     
断点不起作用的另一个原因可能是(通常使用delphi5进行测试): 一个单元中的过程太多。 解决方案是将程序移至另一个单元     
我也面临着同样的问题,所以我来到了这里。 除了David Heffernan解决方案之外,我还在这里添加图像。 就我而言,这非常简单。 在项目浏览器中,当我将其更改为Debug时,它是Release,它对我有用。 请看图片。 谢谢 快乐编码 伊克巴尔     
在delphi 7中,设置断点似乎是一个真正的错误。 我有一个单位,可以在其中定义许多文本   const constname:记录类型的数组[0..x] =(...); 在接口部分,其中record-type有一些AnsiString项目。 在实施部分中,有一些过程。 在某些特定情况下,当我在过程中的任何地方设置断点时,delphi不会在此停下来! 备注:调试的所有选项均已正确设置(因为F7会使delphi停止在程序的“开始”,在执行该应用程序时,整个单元中都可见蓝点,该行保持红色),并且所有具有在我对整个项目进行完整构建之前,已从所有磁盘和所有文件夹内删除了PAS文件。因此,任何wold文件都不应在任何地方徘徊。 为了进行测试,我将PAS重命名为一个以前从未使用过的名称,并且肯定没有在磁盘上的其他任何地方,然后改编了所有源文件并重新编译,以确保delphi和我正在查看同一个PAS文件-但断点是也不起作用。 但是还有另一件事发生了,很奇怪:我的可执行文件中的文本const(!)发生了变化(不是在exe文件中,而是在内存中)!在程序启动期间检查了这些文本的正确性,有时它抱怨错误!在消息框中显示的文本表明,该文本中的单个字符已更改,该字符定义为const。为了进行测试,我尝试为代码中的const分配一些内容,但是正如预期的那样,编译器抱怨说,因此它不能是导致文本更改的普通分配。必须是错误的指针。奇怪的。 因此,经过了数小时的测试,寻找可能设置了错误指针的任何源代码,这些指针后来可能导致文本const的更改。我将消息框放置在我可以编辑的单元初始化链中的第一个单元的初始化部分中,但是更改的char已经在那里!那么,必须在应用程序启动期间非常早地进行更改! 最后我弄清楚了,出现在文本中的char始终是$ CC-这正是INT 3的汇编代码,这是delphi用于设置断点的代码。当在该单元内的断点向上或向下移动一行时,更改字符的位置也会向左或向右移动一些字符!错误的字符移动的数量与相关行所需的汇编代码字节的估计数量有关。在彼此靠近的行中设置两个断点,突然两个字符发生变化!从该单元删除所有断点时,文本保持不变! 因此,只有一个结论:在尝试设置断点时,delphi本身正在更改文本,但没有这样做。我无法摆脱这个错误。重新同步delphi的内部簿记源代码和目标代码文件的技巧都没有帮助我! 由于相关单元主要由多个{$ IFDEF}之间的{$ I}行组成,因为其中包含一些不同但较长的Pascal文本,因此我认为delphi在包含时间太长或对条件编译器指令的求值方面存在问题。因此,我删除了includes并将源文本立即放入单元中,并删除了{$ IFDEF} s-编译没有错误,但是设置断点也改变了我的文本常量,而不是停止执行。全都一样! 我现在通过将单元拆分为两个单元来解决了这一问题,一个单元仅在其界面部分保留了文本const,而第二个单元则保留了过程。现在,无需更改任何编译器或链接器设置,所有断点都可以按预期工作,并且不再更改文本! 因此,如果断点对您不起作用,但您确定它们应该起作用,则可能是delphi的元凶,并且无法将断点设置在正确的位置。如果它只是更改一些文本,也许永远不会引起您的注意。拆分单位可以帮助我,也许也可以帮到您。     
如果要在其中设置断点的文件是DLL的一部分,则需要通过在项目管理器中双击该DLL使其处于活动状态,然后将其变为粗体,然后对其进行构建,使该DLL处于活动状态。然后,蓝色圆圈将显示在允许您设置断点的行旁边。     
尝试对本地PC进行远程调试。 工作原理:(来源)   在本地调试Delphi项目时,RAD Studio不会使用您的RSM调试文件,因为编译器会将符号表保存在内存中。但是,在远程调试Delphi项目时,必须生成一个包含这些符号表的RSM调试文件。否则,RAD Studio不会在您的断点处停止。 当然,必须首先将项目的“链接”选项“映射文件”配置为“详细”,以生成* .rsm文件。有关如何开始的信息,请参见远程调试概述。     
就我而言,我正在一个单元中设置断点,而该单元在IDE中打开时却不属于当前活动项目。这样的断点也显示为绿色。 IOW我根本不在正确的页面上。 (我在尝试了上述所有方法后发现了这一点。)     
如果项目组使用包(BPL),请确保它们均不包含任何有关隐式导入单元的编译器警告。如果存在,则只能通过CPU调试窗口单步执行代码。     
答案有点晚,但我也偶然发现了这个问题。 如果我使用调试配置在项目管理器中激活了MyPackage.bpl(粗体),然后对其进行了编译,则可以看到IDE注册了调试信息(编辑器左侧的蓝点)。 但是,当我激活MainProject.exe(使用MyPackage.bpl的那个)时,这些蓝点将消失,表明不再存在调试信息。经过一番摸索之后,我意识到我确实在MyPackage.bpl的Release配置上而不是在Debug配置上设置了一个依赖项(右键单击MainProject.exe-> Dependencies)。 每次编译MyProject.exe时,它将与Release配置而不是调试配置链接! 因此,请检查您的依赖项配置!     
我在Delphi Compile(我们做MS Build)下检查了MSBuild。那阻止了断点的工作。未经检查,它可以工作。     
通过使用F9运行应用程序,断点将按预期工作。我正在使用XE4,我不知道这是否可以“修复” Delphi的先前版本。     

要回复问题请先登录注册