질문/조언팁/리소스 공유

php 파일에서 에러가 발생하면 Debug 정보에 표시된 줄수와 실제 에러발생 위치가 일치하지만, *.html에서 에러가 발생하면 화면에 표시된 에러 라인하고 소스의 라인하고 일치하지 않는 경우가 대부분입니다. 주로 스킨/레이아웃/페이지에서 발생합니다.

 

정확한 에러 라인을 찾는 팁을 소개합니다.

 

팁1. 실제 에러 발생 라인은 디버그 화면에 표시된 라인보다 아래에 위치합니다.

 

예를들어, 화면에 600라인에서 에러가 발생했으면 실제 에러는 605, 610은 될수 있지만, 590 혹은 580줄에서 발생했을 가능성은 낮습니다. (물론 위에서 발생한 것이 영향을 미쳐 아래에서 발생했다 표시할 가능성이 없는 것은 아닙니다)

 

팁2. "실제 에러 발생 라인" = "DEBUG에 표시된 라인" + "주석 처리된 라인"

 

예를들어, 600줄에서 에러가 발생했다고 화면에 표시되고, 소스에서 0~600라인까지 <!--   -->로 주석 처리된 라인이 10줄이면, 실제 에러 발생 라인은 610줄에서 발생했을 가능성이 높습니다.

 

왜 DEBUG가 에러발생 라인을 다르게 표시할까 생각해보니, *.html 문서를 읽어들인 후, 제일먼저 주석처리된 줄을 삭제하고, 나머지 부분을 가지고 처리하다 에러가 나면 화면에 표시하다 보니까, 주석처리된 줄수가 빠진 Line 수가  표시되는 것 같다는 추론입니다.

 

팁3. 고의로 에러를 유발해봅니다

 

그래도 정확한 줄수를 모르겠으면, 에러가 발생했다고 하는 줄에 Syntax Error가 있는 php 문구를 넣어봅니다. 예를들면, {@ abc=' ';} 같은 것을 600 줄에 넣어봅니다. 그러면 당연히 화면에 에러가 표시됩니다. "592줄에서 Error가 났다". 오호~ 그렇다면 실제 에러는 이 줄에서 8줄 밑에서 난 것입니다. 다시 8줄 밑에 이 문구를 넣어봅니다. 2번만 하면 정확한 줄수를 찾을수 있습니다.

 

  • profile

    유용한 팁이네요.^^

    에러메시지에 나오는 함수명으로 추정해보는 방법도 있습니다. 예를 들어 PHP 8.0에서 count 함수가 자주 말썽을 일으키는데, count 어쩌고 하는 에러가 뜬다면 600줄 전후에서 count라는 단어가 포함된 곳을 찾아보는 것이지요.

    아무튼 라이믹스에서는 디버깅 편의를 위해 가능하면 줄번호가 달라지지 않도록 하는 방향으로 개선해 나가겠습니다. 주석의 영향부터 좀 살펴봐야겠군요.

  • profile
    좋은정보 감사합니다
  • profile
    라이믹스가 템플릿에서 나는 에러를 뿌려주는 라인수가 대부분은 PHP으로 변환된 파일들을 기준으로 아마 출력해줄겁니다.. 그래서 줄수가 안맞는 일이 ㅠㅠ
  • profile
    예를 들어,
    /modules/board/skins/rhymix-sketchbook/_read.html 에 에러가 있다고 리포트가 되었는데 실제 라인과 불일치(하고 심지어 그 라인 근방에서조차 찾는 게 불가능)하다면,
    /files/cache/template/modules/board/skins/rhymix-sketchbook/_read.html.php 를 찾아보세요.

    람보님 이야기처럼 html 파일이 php로 컴파일되어 캐시로 저장되는데, 디버깅 기능은 이 캐시 파일들을 기준으로 이뤄지는 것 같더라구요.