为什么我的{$ IFDEF DEBUG}条件不适用于Delphi?

时间:2014-03-12 02:52:13

标签: delphi debugging preprocessor delphi-7 conditional-compilation

我在Delphi 7项目中有以下代码(IP地址已更改)。

const
{$IFNDEF DEBUG}
    AUTHENTICATOR_DB_ADMIN_HOST = '123.456.789.12';
{$ELSE}
    AUTHENTICATOR_DB_ADMIN_HOST = '127.0.0.1';
{$ENDIF}

在项目选项下:

  • 在"目录/条件和"选项卡标有"条件"部分,我有一个单一的定义:" DEBUG"。
  • 在"版本信息"标记为"模块属性"的部分下的标签,我勾选了标有" Debug-build"。
  • 的复选框。

在上面的代码示例中," DEBUG"未定义符号,因此IP地址设置为123.456.789.12而不是127.0.0.1我做错了什么?

此问题紧随Does Delphi's conditional compilation allow the defined symbols to contain values?

3 个答案:

答案 0 :(得分:9)

如果您编译项目并且没有更改,并且DCU在最后一次非调试版本的路径上可用,那么将使用它,从而导致此问题。还要确保此单元包含在DPR的使用条款中。

如果您构建项目,它将强制重新编译添加到项目中的所有单元。

我通常编译语法,但总是为测试/部署而构建。

答案 1 :(得分:0)

我知道老问题,但这是我的答案。在Delphi 2010(无疑是其他版本)中,DEBUG条件是由配置管理器设置的,它实际上是保留字。

考虑这个简单的例子:-

program Buggy;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
{$IFDEF DEBUG}
  WriteLn('DEBUG condition is ON.');
{$ELSE}
  WriteLn('DEBUG condition is OFF.');
{$ENDIF}
{$IFDEF RELEASE}
  WriteLn('RELEASE condition is ON.');
{$ELSE}
  WriteLn('RELEASE condition is OFF.');
{$ENDIF}
  ReadLn;
end.

您可以通过更改编译器配置来更改这些条件的设置:-

Project / Configuration Manager

简而言之,请勿自己使用DEBUG或RELEASE-为测试创建一个唯一的指令。

尽管有其他注释,但我使用的条件有助于解决语法错误,较小的exe并防止对我不想发布的代码进行反向工程。

答案 2 :(得分:-2)

用“ $ IFNDEF”代替“ IFDEF”(否定形式用Ndef代替def)。