为什么断点是绿色的并且不起作用?

Why are breakpoints green and not working?

我正在尝试 运行 对我的代码进行调试,但不知何故它停止工作了。这是一个片段及其显示的绿线:

我做错了什么?

这是一种正常的编译器行为。当从未从程序内部的任何地方调用过程(代码行)时,就会发生这种情况。编译器会跳过此类过程和函数(其中的所有代码行)。 看图

您只需要检查程序(行)是否真的至少从应用程序中的任何地方调用过一次。

追加

当永远无法调用代码行并且可以在编译时评估此(逻辑语句)(结果是预先知道的并且在运行时不会受到影响)时也会发生这种情况。编译器优化了跳过这些行的代码。这就是为什么它不接受休息时间。

这里是后一个程序的反汇编。第37、38行的if false then ...语句省略:

添加到 asd-tm 的答案中,我在所有单元中都包含以下行:

unit SomeRandomUnit;
{$I ProjOptions.inc}

在 ProjOptions.inc 文件中,我包含了以下代码:

// Compiler switches:
//              Debug Info      Optimisation
// DEBUG            On              Off
// RELEASE          Off             On
{$IFDEF DBG}
    {$D+}
    {$O-}
{$ELSE}
    {$D-}
    {$O+}
{$ENDIF}

这样一来,我在调试时就可以关闭优化并打开调试信息,而不必担心不小心在项目 > 选项中切换某些内容。从 PROJECT\objects 文件夹中手动删除 DCU 文件(结合上面的 .inc 文件)应该可以保证断点再次工作(至少在 DEBUG 版本中)。