Система визуального объектно-ориентированного проектирования C++Builder 119

Memol->Lines->Add("A = "+FloatToStr(A)+", i^"+IntToStr(i)) ;

#endif
)
Labell->Caption = "A = " + FloatToStr(A);

В этом коде прокомментировано все, относящееся к отладке. В обработчике со-
бытия формы OnCreate создается окно отладки FDebug и в нем — окно редактиро-
вания Memol. В цикл нашего примера вставлен вывод информации в это окно. В
событии формы OnDestroy предусмотрено уничтожение отладочного окна. При-
чем, все это делается только если не определен идентификатор NDEBUG.

Попробуйте сделать в приложении указанные изменения и запустить его на
выполнение. Вы увидите в процессе выполнения окно, показанное на рис. 2.52, в
которое по мере работы приложения будут заноситься данные. Если бы это было
какое-то сложное приложение, то вы непосредственно в процессе выполнения мог-
ли бы просматривать эти данные и наблюдать за ходом работы.

Рис. 2.52

Окно отладки

|А

А

После того, как вы отладили приложение, вы можете легко удалить всю отла-
дочную печать, введя директиву

ttdefine NDEBUG

Здесь, впрочем, надо сделать одно замечание. Сложное приложение, увы, не
может быть сделано без ошибок. Ошибки могут проявляться иногда через месяцы
и годы работы у пользователя в каких-то экзотических ситуациях, при каких-то
редких сочетаниях исходных данных или каких-то непредусмотренных действиях
пользователя. Причем ошибки могут возникнуть на компьютере пользователя,
где, естественно, нет ваших исходных файлов а, возможно, нет и C+4-Builder. В та-
ких ситуациях могла бы помочь отладка проекта непосредственно на компьютере
пользователя. Но при рассмотренных ранее подходах отладка в завершенном вы-
полняемом модуле отсутствует.

Исходя из этого я, например, предпочитаю в готовом приложении оставить не-
которые возможности отладочной печати. Включать ее можно, например, создани-
ем в текущем каталоге текстового файла с условным именем Debug.txt. Тогда
можно ввести в проект некоторую переменную debug, значение которой определя-
ется наличием или отсутствием этого файла:

bool debug = FileExists("Debug.txt");

Тогда те отладки (конечно, немногочисленные), которые желательно оставить
в приложении могут выполняться по условному оператору

if(debug)

Тогда при нормальной работе, когда файла Debug.txt нет, никаких отладок не
будет и пользователь даже не будет подозревать об их наличии в приложении. Но