IFDEBUG

4 отговора 93 прегледа
#1

IFDEBUG

Здравейте,
Понякога в пограмите ми (Delphi 6) се налага да се изпълнява или не кода на в зависимост от това дали в момента дебъгвам или ползвам exe-то.
Въпроса ми е как да детерменирам дали съм в дебъг режим. Ако не се лъжа мисля, че бях срещял някъде директива IFDEBUG или нещо подобно. Ако някой има идея как се използва, моля да драсне едно примерче за което предварително благодаря.

Отговор
в отговор на mishomich #2

Всъщност IFDEF :)

Всъщност директивата е IFDEF. Използва се по следния начин:

...
...
DoSomething;
{$IFDEF DEBUG}
DebugMessage('some message');
{$ENDIF}
DoSomethingElse;
...
...

Кодът между двете директиви ще се игнорира от компилатора, освен ако не е дефиниран DEBUG (това става например от Project -> Options -> Directories/Conditionals или пък с директивата DEFINE). Забележи, че това става още по време накомпилация, а не по време на изпълнението на програмата.
Не е задължително условието да ти се казва DEBUG - можеш да си го кръстиш както искаш.

Отговор
в отговор на mishomich #3

Re: IFDEBUG

Като поясни по-горе човека + едно допълнеие.

От менюто:

Project/Options -
tab Directories/Conditionals

секция:
Conditional Defines

Не забрявай че директивата влиза в дейстие при промяна само след BUILD!
Директивите може да са няколко на брой.
Вместо през GUI-то на Делфи, може да ги добавиш и отделен файл който да се include-не в прокта ти - например Defs.inc

Поздрави.

Отговор
в отговор на Brother #4

Re: IFDEBUG

...и още едно допълнение:
Като трети вариант може да се използва и
...

...
DoSomething;
{$IFOPT D+}
DebugMessage('some message');
{$ENDIF}
DoSomethingElse;
...
...

чрез което "DebugMessage()" ще се изпълни само ако си включил опцията "Debug Information" в Project -> Options -> Compiler.
Споменавам го само за пълнота - нито ми харесва, нито го използвам. Предпочитам посочения в предишните отговори вариант, защото позволява по-голяма гъвкавост и независимост от компилатора.

Отговор
в отговор на mishomich #5

10x

Балагодаря за бързите и полезни отговори.

Отговор