PHP ve Laravel Debugging: Hata Ayıklama Teknikleri

z

zafer ak

Yazar

06 November 2025 2 dakika okuma 2 görüntülenme
PHP ve Laravel Debugging: Hata Ayıklama Teknikleri
PHP debugging araçları, Xdebug, Laravel Telescope ve Ray. Production debugging ve log management.

Debugging Araçları

dd() ve dump()

// Die and dump
dd($variable);

// Dump without dying
dump($variable);

// Multiple variables
dd($user, $orders, $total);

// Collection debug
$users->dd();

Laravel Log

use Illuminate\Support\Facades\Log;

Log::debug('Debug message', ['user_id' => $user->id]);
Log::info('User logged in');
Log::warning('Low stock alert');
Log::error('Payment failed', ['order_id' => $order->id]);

// Contextual logging
Log::withContext(['user_id' => auth()->id()])
    ->info('Order created');

Xdebug

# php.ini
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003

# VS Code launch.json
{
    "name": "Listen for Xdebug",
    "type": "php",
    "request": "launch",
    "port": 9003,
    "pathMappings": {
        "/var/www": "${workspaceFolder}"
    }
}

Laravel Telescope

composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate

// TelescopeServiceProvider
public function register()
{
    Telescope::night();

    $this->hideSensitiveRequestDetails();

    Telescope::filter(function (IncomingEntry $entry) {
        if ($this->app->environment('local')) {
            return true;
        }
        return $entry->isReportableException() ||
               $entry->isFailedRequest() ||
               $entry->isSlowQuery(100);
    });
}

Ray (Spatie)

composer require spatie/laravel-ray

// Kullanım
ray($variable);
ray($user)->green();
ray('Query count')->count();

// Measure execution time
ray()->measure();
// ... code
ray()->measure();

// Pause execution
ray()->pause();

// Show queries
ray()->showQueries();

Query Debugging

// Query log
DB::enableQueryLog();
// ... queries
dd(DB::getQueryLog());

// Single query
User::where('active', true)->toSql();
// "select * from users where active = ?"

// With bindings
User::where('active', true)->toRawSql();
// "select * from users where active = true"

Exception Handling

// app/Exceptions/Handler.php
public function register(): void
{
    $this->reportable(function (Throwable $e) {
        if ($e instanceof PaymentException) {
            Log::channel('payments')->error($e->getMessage(), [
                'trace' => $e->getTraceAsString()
            ]);
        }
    });
}

// Custom exception
throw new PaymentException('Card declined', [
    'card_last4' => $card->last4
]);

Production Debugging

# Error tracking services
- Sentry
- Bugsnag
- Flare (Ignition)

# Sentry integration
composer require sentry/sentry-laravel
php artisan sentry:publish

// .env
SENTRY_LARAVEL_DSN=https://[email protected]/xxx

Log Management

// config/logging.php
'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['daily', 'slack'],
    ],
    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'days' => 14,
    ],
    'slack' => [
        'driver' => 'slack',
        'url' => env('LOG_SLACK_WEBHOOK_URL'),
        'level' => 'error',
    ],
]

Sonuç

Etkili debugging, development süresini kısaltır. Doğru araçları kullanmak ve log stratejisi oluşturmak önemlidir.

İlgili Yazılar