__line__, __file__ 및 __function __와 함께 PINPOINT-ACCARUTE 디버깅
C/C에서 가장 효과적인 디버깅 트릭은 내장 된 매크로 __file__, __line__ 및 __function__를 사용하여 정확한 오류 컨텍스트를 얻는 것입니다. 1. __file__는 현재 소스 파일의 경로를 문자열로 제공합니다. 2. __line__는 현재 줄 번호를 정수로 제공합니다. 3. __function__ (비표준이지만 널리 지원되는) 또는 __func__ (표준 C 11)는 동봉 된 기능 이름을 반환합니다. 이러한 컴파일 타임 상수는 런타임 오버 헤드없이 상세한 로깅을 허용하므로 추적 충돌 또는 유효하지 않은 상태가 쉽습니다. 사용자 정의 어설 션을 작성하거나 디버거없이 디버깅하거나 레거시 또는 임베디드 시스템에서 작업 할 때 특히 유용합니다. 더 나은 재사용을 위해 Debug_log () 또는 assert ()와 같은 매크로로 랩하십시오. __function __의 정확도에 영향을 줄 수 있으므로 인라인에주의를 기울이고 더 엄격한 휴대 성을 위해 __func__를 선호합니다. 이러한 도구를 사용하면 지속적으로 디버깅 시간을 절약하고 외부 종속성이 필요하지 않습니다.
C (또는 C) 코드를 디버깅 할 때 가장 간단하지만 가장 효과적인 트릭 중 하나는 내장 전처리 매크로 __LINE__
, __FILE__
및 __FUNCTION__
활용하는 것입니다. 이들은 기능이나 변수가 아닙니다. 컴파일 타임 상수는 컴파일러에 의해 자동으로 채워져있어 어떤 문제가 발생했는지에 대한 정확한 컨텍스트를 제공합니다.
이 매크로가 중요한 이유
코드에서 충돌, 실패한 주장 또는 예상치 못한 상태를 추적한다고 상상해보십시오. "Error occurred"
과 같은 일반 메시지 인쇄는 큰 도움이되지 않습니다. 그러나 로그인하면 :
std :: cerr << "at"<< __file__ << ":"<< __line__ << "in"<< __function__ << std :: endl;
갑자기, 당신은 어떤 파일, 어떤 라인 및 어떤 함수가 문제를 유발했는지 정확히 알고 있습니다.
이 매크로는 다음과 같은 경우에 특히 유용합니다.
- 저수준 디버깅 로그를 작성하고 있습니다
- 당신은 맞춤 어설을 구축하고 있습니다
- 디버거가없는 환경에서 일하고 있습니다
- 레거시 또는 임베디드 시스템을 유지하고 있습니다
각 매크로의 작동 방식
-
__FILE__
→ 현재 소스 파일의 전체 경로의 문자열 문자로 확장 (예 :"src/utils.cpp"
) -
__LINE__
→ 현재 줄 번호를 나타내는 정수 상수로 확장 -
__FUNCTION__
→ Enclosing 함수의 이름을 보유하는 비표준이지만 널리 지원되는 식별자 (참고 : 매크로가 아니라 정적 const char []에서 c)
예:
void processData (int value) { if (value <0) { STD :: CERR << "유효하지 않은 입력 감지 \ n" << "파일 :"<< __file__ << "\ n" << "라인 :"<< __line__ << "\ n" << "func :"<< __function__ << std :: endl; } }
산출:
잘못된 입력이 감지되었습니다 파일 : src/main.cpp 라인 : 42 func : processData
더 나은 디버깅을위한 실용적인 팁
재사용을 위해 매크로를 감싸십시오.
#define debug_log () \ std :: cerr << "디버그 :"<< __file__ << ":"<< __line__ \ << "in"<< __function__ << std :: endl
그런 다음 필요한 곳에 뿌립니다.
debug_log (); // 빠른 추적 지점
주장과 결합 :
#define assert (cond) \ 하다 { \ if (! (cond)) {\ std :: cerr << "어설 션 실패 :"#cond "\ n"\ << "at"<< __file__ << ":"<< __line__ \ << "in"<< __function__ << std :: endl; \ std :: abort (); \ } \ } while (0)
이제 실패에 대한 풍부한 맥락을 얻습니다.
인라인에 대한 조심 :
함수가 인쇄 된 경우__FUNCTION__
일부 상황에서 발신자의 기능을 반영합니다. 깊게 중첩되거나 최적화 된 코드를 디버깅 할 때 알아 두십시오.컴파일러 차이점 :
__FILE__
및__LINE__
는 표준이지만__FUNCTION__
는 구현 별입니다. 더 엄격한 이식성을 위해 모든 기능에서 사용할 수있는 로컬 정적 변수 인__func__
(c 11)를 고려하십시오.void foo () { std :: cout << "지금 :"<< __func__ << std :: endl; // 표준 C 11 }
참고 :
__func__
매크로가 아니므로#
로 문자열을 할 수는 없지만 신뢰할 수 있고 표준입니다.결론
실행 가능한 디버그 정보를 얻으려면 멋진 로깅 프레임 워크가 필요하지 않습니다.
__LINE__
,__FILE__
및__FUNCTION__
(또는__func__
)를 사용하면 진단에 제로 비용의 정확한 컨텍스트를 추가합니다. 그들은 항상 사용 가능하고 설정이 필요하지 않으며 버그를 추적 할 때 시간을 절약합니다.기본적으로 이미 사용하지 않는 경우 지금 시작하십시오. 디버깅 101이지만 종종 간과되었습니다.
위 내용은 __line__, __file__ 및 __function __와 함께 PINPOINT-ACCARUTE 디버깅의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

traitisamagicconstantinphpthatalways는 theTraitin의 traitiStrainsTHETINSTHETINSTHITINSTRAITINSTHITINSTERITINSTERITINSOUSITIN.1.ItusteLvedAtCallassclass.2.unlikeclass __

DirisessentialForBuildingRelyplepaUtoloadersbecauseItSprovideastable, AbsolutePatheCurrentFile'Sdirectory, 일관성이 있으므로

DIR 및 파일은 PHP의 Magic 상수이며 복잡한 프로젝트의 상대 경로로 인한 파일 포함 오류를 효과적으로 해결할 수 있습니다. 1. 파일은 현재 파일의 전체 경로를 반환하고 __dir__는 디렉토리를 반환합니다. 2. DIR을 사용하여 포함되거나 요구 사항이 항상 현재 파일에 비해 실행되거나 다른 통화 스크립트로 인한 경로 오류를 피하십시오. 3. require_oncedir. '/../config.php'와 같은 파일을 안정적으로 포함시키는 데 사용될 수 있습니다. 4. 입력 파일의 Base_dir 상수를 정의하여 프로젝트 경로 관리를 통합합니다. 5. $ config = requiredir. '/config/dat와 같은 구성 파일을 안전하게로드하십시오

클래스 __, __ 메소드 __ 및 __namespacearephpmagicconstants thatprovideContextualInformetAprogramming.1.ClassReturnsHiplyQualifiedClassName.2.methodreturnsTheClassandMethodnamewithNamespace.3.namesPacerEturnsPacestring

__DIR__를 사용하면 PHP 응용 프로그램에서 경로 문제를 해결할 수 있습니다. 현재 파일이 위치한 디렉토리에 대한 절대 경로를 제공하여 다른 실행 컨텍스트에서 상대 경로 사이의 불일치를 피할 수 있습니다. 1. dir__는 파일이 포함될 때 정확한 경로를 보장하기 위해 항상 현재 파일의 디렉토리 절대 경로를 반환합니다. 2. 신뢰할 수있는 파일 참조를 실현하기 위해 __dir. '/../config.php'및 기타 방법을 사용하고 통화 방법의 영향을받지 않습니다. 3. 경로 관리의 유지 보수 가능성을 향상시키기 위해 항목 파일에서 App_Root, Config_Path와 같은 상수를 정의합니다. 4. 자동로드 및 모듈 등록에 __dir__를 사용하여 올바른 클래스 및 서비스 경로를 보장합니다. 5. $ _server [ '문서에 대한 의존성을 피하십시오

ContextualMagicConstantsArenameD, 의미 가득한 식별기, thatasuser_login_attemptorPayment_processing.2

themosteffectivedebuggingtrickinc/c issusing-inmacros __file __, __ line __ 및 __function__togetPreciseErrorContext.1 .__ 파일 __providestHecurrentSourcefile'spathasastring.2. __ line__gecurrentLineNumberAsaninteger

PHP 플러그인 아키텍처에서는 __namespace__를 사용하는 것은 현재 네임 스페이스를 동적으로 반환하여 이동 또는 이름을 바꾼 후 코드가 여전히 유효하도록 할 수 있기 때문에 중요합니다. ∎ 동적 클래스 인스턴스화 및 콜백 분석을 지원하므로 네임 스페이스가 변경 될 때 플러그인에 의해 등록 된 이벤트 프로세서가 여전히 정확합니다. ② 자동화 및 클래스 발견을 단순화하고 PSR-4 표준을 결합하여 핵심 시스템은 플러그인에서 부트 스트랩 클래스를 정확하게 찾을 수 있습니다. hind 하드 코딩 문자열을 피하고 코드 유지 보수 성을 개선하며 재구성의 위험을 줄입니다. debugging을 위해 __class__, __method__ 등과 결합 할 수 있습니다. 요약하면, __namespace__는 플러그인 시스템의 휴대 성, 유지 가능성 및 일관성을 향상 시키며 확장 가능한 시스템을 구축 할 수있는 확장 가능한 시스템입니다.
