В некоторых случаях компилятор может определить, недоступен ли код, и удалить код.
Например, компилятор правильно удаляет «недоступную» часть кода ниже.
Он не будет генерировать код для этой строки, поэтому:
- Таким образом, нет синих пуль, указывающих на наличие кода
- Точки останова, установленные на этой линии, будут визуально помечены как «недостижимые»
Только что протестировано в Delphi XE, но более старые версии Delphi ведут себя аналогично.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure Test;
begin
if (True = False) then
Writeln('Unreachable')
else
Writeln('Reachable');
end;
begin
try
Test();
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Требуется довольно много времени, чтобы понять, когда (или когда нет) активируется оптимизатор на уровне кода и на уровне liker.
Например: если у вас включены оптимизации, компилятор также удалит переменные, как только они не будут использованы.
Иногда это даже устраняет глобальные символы.
Дэнни Торп (бывший инженер компилятора Delphi и главный ученый) однажды написал магический метод Touch , который предотвращает это.
Просто вызовите этот метод Touch в конце вашего метода, чтобы обмануть оптимизатор во время отладки:
procedure Touch(var arg);
begin
end;
- Йерун