Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2011, 10:25   #1
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию Delphi отладка

Привет!

Как выборочно компилировать один код в режиме отладки, а другой код в релизе?

Пробовал так, но каждый раз приходится в ручную {$DEFINE DEBUG} убирать для релиза:

Код:
  {$DEFINE DEBUG}
  {$IFDEF DEBUG}
    ...
  {$ELSE}
    ...
  {$IFEND}

Последний раз редактировалось VadEr; 19.08.2011 в 10:29.
VadEr вне форума Ответить с цитированием
Старый 19.08.2011, 10:53   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

может, конечно, это я такой непонятливый, но я совсем не понял, что у Вас не получается...

если переменная объявлена ($DEFINE), то там, где Вы используете условную компиляцию, компилируется код в веточке $IFDEF

Если нужно, чтобы этот код не компилировался то достаточно комментировать $DEFINE Debug - и скомилировать проект..

Что не так?

p.s. мне кажется, что такие дефайны удобно вынести в отдельный файл, например,
MyDef.inc
и во всех модулях, где нужна условная компиляция прописать
{$I MyDef.inc}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.08.2011, 13:25   #3
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Обновить Delphi. В 2007 и выше есть менеджер конфигураций, при сборке debug-версии сам добавляет строку в conditional defines.

В качестве костыля на старых версиях можно проверять опции компилятора, например
Код:
 {$IFOPT D+}
    ShowMessage('Debug info on');
 {$ELSE}
    ShowMessage('Debug info off');
 {$ENDIF}
пыщь
JTG вне форума Ответить с цитированием
Старый 19.08.2011, 16:59   #4
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Да, проблема как раз во том и была, что ($DEFINE) надо в каждом модуле писать, глобально не видит. Поэтому, есть вероятность, что его закоментить где нибудь можно забыть.

Вариант Serge_Bliznykov-а вроде бы решает эту проблему, т.к. комментить теперь только надо в одном месте, но появляется другая. => Код выносится в другой модуль, и понимание логики процедуры "для программиста" затрудняется.

Костыль предложенный JTG насколько я понял близок к VStuduo-скому, но не понятно: что такое "D+" и где и как его меняют? Меняется ли эта опция в настройках среды или так же вручную прописать надо где-то {$D+}, а потом видимо "D-"?

p.s. IDE: delphi7
VadEr вне форума Ответить с цитированием
Старый 19.08.2011, 18:40   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
глобально не видит
DEBUG указывается в опциях компилятора в поле conditional defines и во всём проекте этот дефайн видно.

$D+ это галочка "debug information" там же.
пыщь
JTG вне форума Ответить с цитированием
Старый 19.08.2011, 20:51   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Как вариант:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids;

type
  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  function  IsDebuggerPresent:boolean; external 'kernel32.dll';
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 if IsDebuggerPresent then ShowMessage('Меня отлаживают') else ShowMessage('Я свободен словно птица в небесах');
end;

end.
P.S. правда это не к компиляции относится, но иногда помогает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2011, 13:04   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Код выносится в другой модуль, и понимание логики процедуры "для программиста" затрудняется.

в отдельный файл выносится ровно одна строчка:

Код:
{$DEFINE DEBUG }
всё. Что тут кому затрудняет понимание?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Митчелл Керман. Программирование и отладка в Delphi Антон Лысенко Помощь студентам 0 16.04.2011 17:44
Тип-запись(type ... record) в Delphi Pascal; отладка программы Legky Помощь студентам 1 22.12.2010 19:13
Delphi (отладка) при запуске поля ввода пропадают djdron Помощь студентам 0 11.11.2010 21:29
Отладка DLL средствами Delphi mMAg Помощь студентам 4 25.08.2009 17:54
отладка в delphi explorer Elm0 Общие вопросы Delphi 2 19.12.2008 11:13