ставь // перед всеми строчками с методами из CRT, ну или если несколько строчек подрят - заноси в такую штуку
{
эта строчка сейчас коментарий, но если закрыть скобку на предыдущей то она станет обычной
ещё коментарий
ещё коментарий
{}
так же можно, если нужно найти где ошибка - к примеру ставить writeln(1);, writeln(2);, writeln(3); между разными строчками чтоб видеть куда программа успела дойти перед тем как вылететь, или если не вылетает а значения не правильные - то выводить все значения после каждого действия
ну и если вылет то понадобится
try
//код
except
on e:System.Exception do
writeln(e);
end;
ну а вообще в идеале проходишь по всем функциям из CRT которые используешь, нажимаешь ПКМ и Перейти к определению, ну или Перейти к реализации, смотришь как функция устроена и заменяешь её у себя в программе. К примеру если мне сильно надо отчищать консоль и при этом заниматься отладкой то пишу System.Console.Clear, а если надо оч чтоб программа не вылетала доходя до этой строчки то пишу свою процедуру
procedure ClrScr;
begin
if System.Reflection.Assembly.GetExecutingAssembly.GetType('__RedirectIOMode.__RedirectIOMode')=nil then
System.Console.Clear;
end;
всё нужное можно найти в самом CRT, как и написать свой CRT скопировав всё и удалив ненужное)
Скажите пожалуйста, как отлаживать программу, содержащую несколько процедур, чтобы посмотреть, как работает каждая процедура. Мысль такая: сначала отлаживать каждую процедуру отдельно как программу, а потом их собирать в общей программе.
пишешь отдельную программу или делаешь так чтоб в той что уже есть программа просто не доходила ни до чего, к примеру readln; exit;(разумеется это будет работать только если все модули ничего не делают до выполнения основной программы) или создаёшь в той же папке файл test.pas, копируешь в него подпрограммы нужные для тестирования и вызываешь их… ну и так же будет работать writeln(1), writeln(2)… и т.п. описанные выше
а вообще мысль плохая, много времени в пустую уйдёт, дебаг и без того долгий и нудный процесс
Эта мысль годится для небольших проектов. Если задача сколь более-менее сложная, под такой отладкой и помрёте. Есть другой подход. Вы начинаете работу с основной программы, в которой пишутся нужные вызовы, в вместо подпрограмм делаете заглушки (Stub), которые сообщают, что выполнен вход и порождают выходные данные, соответствующие алгоритму их работы и взятые из контрольного примера. После отладки головной программы начинаете разрабатывать коды каждой вызываемой программной единицы, причем с самых нижний уровней вызова, потому что у Вас уже есть все дерево вызовов, состоящее из заглушек. Это дает Вам возможность получать внятные результаты, не тратить время на программирование каких-то отладочных выдач и в каждый момент времени иметь дело с отладкой только одной программной единицы.
Рекомендую найти в Интернет (я же нашел!) вот эту книгу и обратить внимание на её третью главу.
Не могу понять в чём ошибка. Простая программа. Смотрю компиляцию в пошаговом режиме. В локальных переменных заносятся значения только первых 11 элементов, а декабрь не заносится.
var ss:array[1…12] of string;
begin
ss[1] :=‘январь’;
ss[2] :=‘февраль’;
ss[3] :=‘март’;
ss[4] :=‘апрель’;
ss[5] :=‘май’;
ss[6] :=‘июнь’;
ss[7] :=‘июль’;
ss[8] :=‘август’;
ss[9] :=‘сентябрь’;
ss[10] :=‘октябрь’;
ss[11] :=‘ноябрь’;
ss[12] :=‘декабрь’;
Мне надо чтобы описание и реализация процедуры были в разных модулях(чтоб то как выполняется процедура в модуле с описанием было разное для разных программ, но при это она была статичной процедурой 1 из классов). Можно сделать её переменной и при инициализации модуля с реализацией присваивать другую процедуру, но есть способ красивее?
Насколько я знаю такую конструкцию невозможно реализовать никаким способом, и кажется, будто некоторые правила введены, чтоб запретить её, не помешав другим фичам, как циклические зависимости в модулях, но какая причина это запрещать? И если всё же есть обход какой то - подскажите…
И я снова пропустил очень полезное нововведение… Когда я последний раз пробовал - ; после class вызывало ошибку компиляции… Я видел на основном сайте где ссылка на скачивание краткий список нововведений, но он слишком уж краткий, есть место с нормальным списком и описанием?