목차
이 매크로가 중요한 이유
각 매크로의 작동 방식
더 나은 디버깅을위한 실용적인 팁
결론
백엔드 개발 PHP 튜토리얼 __line__, __file__ 및 __function __와 함께 PINPOINT-ACCARUTE 디버깅

__line__, __file__ 및 __function __와 함께 PINPOINT-ACCARUTE 디버깅

Jul 29, 2025 am 03:21 AM
PHP Magic Constants

C/C에서 가장 효과적인 디버깅 트릭은 내장 된 매크로 __file__, __line__ 및 __function__를 사용하여 정확한 오류 컨텍스트를 얻는 것입니다. 1. __file__는 현재 소스 파일의 경로를 문자열로 제공합니다. 2. __line__는 현재 줄 번호를 정수로 제공합니다. 3. __function__ (비표준이지만 널리 지원되는) 또는 __func__ (표준 C 11)는 동봉 된 기능 이름을 반환합니다. 이러한 컴파일 타임 상수는 런타임 오버 헤드없이 상세한 로깅을 허용하므로 추적 충돌 또는 유효하지 않은 상태가 쉽습니다. 사용자 정의 어설 션을 작성하거나 디버거없이 디버깅하거나 레거시 또는 임베디드 시스템에서 작업 할 때 특히 유용합니다. 더 나은 재사용을 위해 Debug_log () 또는 assert ()와 같은 매크로로 랩하십시오. __function __의 정확도에 영향을 줄 수 있으므로 인라인에주의를 기울이고 더 엄격한 휴대 성을 위해 __func__를 선호합니다. 이러한 도구를 사용하면 지속적으로 디버깅 시간을 절약하고 외부 종속성이 필요하지 않습니다.

__line__, __file__ 및 __function __와 함께 PINPOINT-ACCARUTE 디버깅

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

뜨거운 주제

__trait__의 맥락 마법 : 수업 내에서 어떻게 행동하는지 __trait__의 맥락 마법 : 수업 내에서 어떻게 행동하는지 Jul 29, 2025 am 04:31 AM

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

방탄 자동 장비 구축 : __dir__ 상수로의 깊은 다이빙 방탄 자동 장비 구축 : __dir__ 상수로의 깊은 다이빙 Jul 31, 2025 pm 12:47 PM

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

상대 경로 마스터 링 : __dir__ 및 __file__의 힘 상대 경로 마스터 링 : __dir__ 및 __file__의 힘 Jul 30, 2025 am 05:35 AM

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

__class__, __method__ 및 __namespace__와 동적 메타 프로 그램링 __class__, __method__ 및 __namespace__와 동적 메타 프로 그램링 Aug 01, 2025 am 07:48 AM

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

__DIR__로 복잡한 응용 프로그램에서 경로 모호성 해결 __DIR__로 복잡한 응용 프로그램에서 경로 모호성 해결 Jul 29, 2025 am 03:51 AM

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

상황에 맞는 마법 상수로 오류 로깅 전략을 향상시킵니다 상황에 맞는 마법 상수로 오류 로깅 전략을 향상시킵니다 Aug 01, 2025 am 07:47 AM

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

__line__, __file__ 및 __function __와 함께 PINPOINT-ACCARUTE 디버깅 __line__, __file__ 및 __function __와 함께 PINPOINT-ACCARUTE 디버깅 Jul 29, 2025 am 03:21 AM

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

유연한 플러그인 아키텍처를 위해 __namespace__ 활용 유연한 플러그인 아키텍처를 위해 __namespace__ 활용 Jul 29, 2025 am 04:20 AM

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

See all articles