어플리케이션 디버깅

var_dump 교체

XDebug와 좋은 IDE를 사용하여 어플리케이션을 디버깅할 수 있지만 때로는 var_dump()만 사용해도 됩니다. CodeIgniter는 PHP를위한 훌륭한 Kint 디버깅 툴을 번들로 제공함으로써 디버깅을 더욱 향상시켰습니다. Kint는 일반적인 도구를 넘어서 타임스탬프를 인식 가능한 날짜로 포맷하고, 16진 코드를 색상으로 표시하며, 배열 데이터를 쉽게 읽을 수 있도록 테이블에 표시하는 등 많은 대체 데이터를 제공합니다.

Kint 활성화

Kint는 기본적으로 developmenttesting 환경에서만 활성화됩니다. 상수 CI_DEBUG가 정의되어 있고 값이 false가 아닐때 활성화됩니다. 상수는 부팅 파일에 정의되어 있습니다(예: app/Config/Boot/development.php).

$useKint = true;

Kint 사용

d()

d() 메소드는 화면에 유일한 매개 변수로 전달된 내용에 대해 알고 있는 모든 데이터를 덤프하고 스크립트가 계속 실행되도록 합니다.

<?php

d($_SERVER);

dd()

이 메소드는 dies()이며 다른 코드는 이 요청에서 실행되지 않는다는 점을 제외하고는 d()와 동일합니다.

trace()

이것은 Kint의 고유한 기능으로 현재 실행 지점에 역 추적을 제공합니다.

<?php

trace();

자세한 내용은 Kint’s page를 참조하십시오.

디버그 툴바

디버그 툴바는 벤치 마크 결과, 실행한 쿼리, 요청 및 응답 데이터 등을 포함하여 현재 페이지 요청에 대한 정보를 한 눈에 보여줍니다. 이는 개발 과정에서 디버그 및 최적화에 도움이 되는 매우 유용한 기능입니다.

Note

디버그 툴바는 아직 구현되지 않은 몇 가지 계획된 기능으로 아직 구축 중입니다.

툴바 활성화

툴바는 프로덕션 환경제외한 모든 환경에서 기본적으로 사용됩니다. 상수 CI_DEBUG가 정의되고 값이 양수일 때 표시됩니다. 부팅 파일 (예 : app/Config/Boot/development.php)에 정의되어 있으며, 어떤 환경에 표시되는지를 결정하기 위해 수정될 수 있습니다.

Note

baseURL 설정이(app/Config/App.php 또는 .envapp.baseURL) 실제 URL과 일치하지 않으면 디버그 툴바가 표시되지 않습니다.

툴바 자체는 After Filter로 표시됩니다. app/Config/Filters.php$globals 속성에서 제거하여 실행을 중지할 수 있습니다.

무엇을 표시할지 선택

CodeIgniter에는 이름에서 알 수 있듯이 툴바에 표시할 데이터를 수집하는 여러 수집기가 제공되며, 툴바를 쉽게 사용자 정의할 수 있습니다. 표시되는 수집기를 확인하려면, 어플리케이션 구성 파일 app/Config/Toolbar.php를 살펴보십시오.

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Toolbar extends BaseConfig
{
    public $collectors = [
        \CodeIgniter\Debug\Toolbar\Collectors\Timers::class,
        \CodeIgniter\Debug\Toolbar\Collectors\Database::class,
        \CodeIgniter\Debug\Toolbar\Collectors\Logs::class,
        \CodeIgniter\Debug\Toolbar\Collectors\Views::class,
        \CodeIgniter\Debug\Toolbar\Collectors\Cache::class,
        \CodeIgniter\Debug\Toolbar\Collectors\Files::class,
        \CodeIgniter\Debug\Toolbar\Collectors\Routes::class,
        \CodeIgniter\Debug\Toolbar\Collectors\Events::class,
    ];
    // ...
}

표시하고 싶지 않은 수집기를 주석 처리하십시오. 정규화된 클래스 이름을 제공하여 사용자 정의 수집기를 추가하십시오. 여기에 표시되는 수집기는 표시되는 탭과 타임라인에 표시되는 정보에 영향을줍니다.

Note

데이터베이스 및 로그와 같은 일부 탭은 표시할 컨텐츠가 있는 경우에만 표시됩니다. 그렇지 않으면 더 작은 디스플레이를 위해 제거됩니다.

CodeIgniter와 함께 제공되는 수집기:

  • Timers 시스템과 어플리케이션에 의해 모든 벤치 마크 데이터를 수집합니다.

  • Database 모든 데이터베이스 연결이 수행한 쿼리 목록과 해당 실행 시간을 표시합니다.

  • Logs 기록된 모든 정보가 여기에 표시됩니다. 장기 실행 시스템 또는 많은 항목이 기록된 시스템에서는 메모리 문제가 발생할 수 있으므로 비활성화해야 합니다.

  • Views 타임라인 바에 뷰의 렌더링 시간을 표시하고 뷰에 전달된 모든 데이터를 별도의 탭에 표시합니다.

  • Cache 캐시 적중, 누락과 실행 시간에 대한 정보를 표시합니다.

  • Files 요청 중에 로드된 모든 파일 목록을 표시합니다.

  • Routes 시스템에 정의된 현재 경로 및 모든 경로에 대한 정보를 표시합니다.

  • Events 요청(request)시 로드된 모든 이벤트 목록을 표시합니다.

벤치마크 포인트 설정

프로파일러가 벤치마크 데이터를 컴파일하고 표시하려면 특정 구문을 사용하여 마크 포인트의 이름을 지정해야합니다.

벤치마크 라이브러리 페이지에서 벤치마크 포인트 설정에 대한 정보를 읽으십시오.

사용자 정의 수집기 생성

사용자 정의 수집기는 간단하게 작성할 수 있습니다. 오토로더가 찾을 수 있도록 완전한(full) 네임스페이스의 CodeIgniter\Debug\Toolbar\Collectors\BaseCollector를 확장하는 새 클래스를 작성합니다. 여기에는 재정의할 수있는 여러 가지 메소드가 제공되며 수집기 작동 방식에 따라 올바르게 설정해야하는 4가지 필수 클래스 속성이 있습니다.

<?php

namespace MyNamespace;

use CodeIgniter\Debug\Toolbar\Collectors\BaseCollector;

class MyCollector extends BaseCollector
{
    protected $hasTimeline = false;

    protected $hasTabContent = false;

    protected $hasVarData = false;

    protected $title = '';
}

$hasTimeline 툴바의 타임 라인에 정보를 표시하려는 수집기에 대해 true로 설정합니다. 이값이 true라면, 표시할 데이터를 포맷하고 반환하기 위해 formatTimelineData() 메소드를 구현해야 합니다.

$hasTabContent 수집기가 사용자 정의 컨텐츠 자체를 탭에 표시하고자 하는 경우 true로 설정합니다. 이것이 true라면 $title을 제공하고 탭의 내용을 렌더링gksms display() 메소드를 구현해야 하며, 탭 내용의 제목 오른쪽에 추가 정보를 표시하기 위해 getTitleDetails() 메소드를 구현해야 할 수도 있습니다.

$hasVarData 수집기가 Vars 탭에 추가 데이터를 추가하려면 true로 설정합니다. 이것이 true라면, getVarData() 메소드를 구현해야 합니다.

$title 은 열려 있는 탭에 표시됩니다.

툴바 탭 표시

툴바 탭을 표시하려면:

  1. 툴바 제목과 탭 머리글에 모두 표시되는 텍스트를 $title에 채웁니다.

  2. $hasTabContenttrue로 설정합니다.

  3. display() 메소드를 구현합니다.

  4. 필요에 따라 getTitleDetails() 메소드를 구현합니다.

display()는 탭 자체에 표시되는 HTML을 만듭니다. 탭 제목은 툴바에서 자동으로 처리되므로 걱정하지 않아도됩니다. HTML 문자열을 반환해야 합니다.

getTitleDetails() 메소드는 탭 제목의 오른쪽에 표시되는 문자열을 반환해야 합니다. 추가 개요 정보를 제공하는데 사용할 수 있습니다. 예를 들어 데이터베이스 탭에는 모든 연결에 대한 총 쿼리 수가 표시되고 파일 탭에는 총 파일 수가 표시됩니다.

타임 라인 데이터 제공

타임 라인에 표시할 정보를 제공하려면:

  1. $hasTimelinetrue로 설정합니다.

  2. formatTimelineData() 메소드를 구현합니다.

formatTimelineData() 메소드는 타임 라인에서 이를 사용하여 올바르게 정렬하고, 올바른 정보를 표시할 수있는 형식의 배열 배열을 반환해야 합니다. 내부 배열에는 다음 정보가 포함되어야 합니다.

<?php

$data[] = [
    'name'      => '',     // Name displayed on the left of the timeline
    'component' => '',     // Name of the Component listed in the middle of timeline
    'start'     => 0.00,   // start time, like microtime(true)
    'duration'  => 0.00,   // duration, like mircrotime(true) - microtime(true)
];

Vars 제공

Vars 탭에 데이터를 추가하려면 다음을 수행합니다.

  1. $hasVarDatatrue로 설정합니다.

  2. getVarData() 메소드를 구현합니다.

getVarData() 메소드는 표시할 키/값 쌍의 배열을 포함하는 배열을 반환해야 합니다. 외부 배열 키의 이름은 Vars 탭의 섹션 이름입니다.

<?php

$data = [
    'section 1' => [
        'foo' => 'bar',
        'bar' => 'baz',
    ],
    'section 2' => [
        'foo' => 'bar',
        'bar' => 'baz',
    ],
];