Embarcadero Delphi
쉽게 제거 할 수있는 런타임 오류 검사 만들기
수색…
소개
이렇게하면 자신이 만든 런타임 오류 검사 루틴을 쉽게 통합하여 끌 때 코드 오버 헤드가 발생하지 않게됩니다.
사소한 예
{$DEFINE MyRuntimeCheck} // Comment out this directive when the check is no-longer required!
// You can also put MyRuntimeCheck in the project defines instead.
function MyRuntimeCheck: Boolean; {$IFNDEF MyRuntimeCheck} inline; {$ENDIF}
begin
result := TRUE;
{$IFDEF MyRuntimeCheck}
// .. the code for your check goes here
{$ENDIF}
end;
개념은 기본적으로 다음과 같습니다.
정의 된 기호는 코드의 사용을 켜는 데 사용됩니다. 또한 명시 적으로 줄이 정렬되는 코드를 중지합니다. 즉, 검사 루틴에 중단 점을 두는 것이 더 쉽습니다.
그러나,이 건설의 진정한 아름다움은 더 이상 수표를 원하지 않을 때입니다. $ DEFINE 을 주석 처리하여 ( '//'앞에 붙이면) 체크 코드를 제거 할뿐만 아니라 루틴 에 대한 인라인 을 켜서 호출 한 모든 장소에서 오버 헤드를 제거합니다 루틴! 컴파일러는 검사의 모든 흔적을 완전히 제거합니다 (물론 인라인 자체가 "On"또는 "Auto"로 설정되었다고 가정).
위 예제는 본질적으로 "assertions"개념과 유사하며, 첫 번째 줄은 사용법에 따라 TRUE 또는 FALSE로 결과를 설정할 수 있습니다.
그러나 이제는 추적 로깅, 메트릭 등을 수행하는 코드에이 방식을 자유롭게 사용할 수 있습니다. 예 :
procedure MyTrace(const what: string); {$IFNDEF MyTrace} inline; {$ENDIF}
begin
{$IFDEF MyTrace}
// .. the code for your trace-logging goes here
{$ENDIF}
end;
...
MyTrace('I was here'); // This code overhead will vanish if 'MyTrace' is not defined.
MyTrace( SomeString ); // So will this.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow