5

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

片段

  • 我试图右键单击我的项目和clean它。
  • 试图删除临时文件,例如.stat.dcu.
  • 来回切换ReleaseDebug模式,重建,重新编译它们。
  • 下面的Debugging选项Project -> Options -> Delphi compiling都设置为true。
  • 检查search paths.
  • 其他项目工作正常。
  • 也试过骂人。

我究竟做错了什么?

4

2 回答 2

7

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

在此处输入图像描述

您只需要检查该过程(行)是否真的至少从应用程序内的任何位置调用过一次。

附加

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

在此处输入图像描述

这是后一个过程的分解。第if false then ...37 行和第 38 行的语句被省略:

在此处输入图像描述

于 2015-10-13T16:47:20.697 回答
1

除了 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 版本中)。

于 2016-07-20T10:23:46.583 回答