首页 > 解决方案 > Xdebug 在 Composer 自动加载时触发断点(当我不想要它时)

问题描述

我设置了一个 Laravel 项目,它像往常一样执行 Composer 自动加载。自动加载器与 composer.json 文件中 Laravel 安装的默认值进行映射:

    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
    }

我的问题是当我在 PhpStorm 中使用 Xdebug 时,它会在通过自动加载器包含类时触发断点,而不是在我设置断点的那一行。

例如:

<?php

namespace App\Http\Controllers;

use App\Bases\BaseJsonApiController;
use CloudCreativity\LaravelJsonApi\Contracts\Store\StoreInterface;
use CloudCreativity\LaravelJsonApi\Http\Requests\FetchResource;
use CloudCreativity\LaravelJsonApi\Http\Requests\FetchResources;

/**
 * Class IndexController
 *
 * @package App\Http\Controllers
 */
class IndexController extends BaseJsonApiController
{
    public function index(StoreInterface $store, FetchResources $request)
    {
        $a = 1;
        return parent::index($store, $request);
    }
}

我只添加了$a = 1;测试添加断点的行。

如果我在行上放一个断点$a = 1;,那么我打的第一个断点是 Composer 自动加载包含这个文件的时候,所以它停止在class IndexController. 如果我跳到下一个断点,它会到达预期的行,$a = 1;.

第一个触发断点的堆栈跟踪是:

IndexController.php:15, include()
ClassLoader.php:444, Composer\Autoload\includeFile()
ClassLoader.php:322, Composer\Autoload\ClassLoader->loadClass()
Container.php:803, spl_autoload_call()
Container.php:803, ReflectionClass->__construct()
Container.php:803, Illuminate\Foundation\Application->build()
Container.php:681, Illuminate\Foundation\Application->resolve()
Container.php:629, Illuminate\Foundation\Application->make()
Application.php:768, Illuminate\Foundation\Application->make()
Route.php:233, Illuminate\Routing\Route->getController()
Route.php:833, Illuminate\Routing\Route->controllerMiddleware()
Route.php:794, Illuminate\Routing\Route->gatherMiddleware()
Router.php:693, Illuminate\Routing\Router->gatherRouteMiddleware()
Router.php:673, Illuminate\Routing\Router->runRouteWithinStack()
Router.php:657, Illuminate\Routing\Router->runRoute()
Router.php:623, Illuminate\Routing\Router->dispatchToRoute()
Router.php:612, Illuminate\Routing\Router->dispatch()
Kernel.php:176, App\Http\Kernel->Illuminate\Foundation\Http\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:173-177}()
Pipeline.php:130, Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128-136}()
InjectDebugbar.php:65, Barryvdh\Debugbar\Middleware\InjectDebugbar->handle()
Pipeline.php:171, Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:147-180}()
TransformsRequest.php:21, Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
Pipeline.php:171, Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:147-180}()
TransformsRequest.php:21, App\Http\Middleware\TrimStrings->handle()
Pipeline.php:171, Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:147-180}()
ValidatePostSize.php:27, Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
Pipeline.php:171, Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:147-180}()
CheckForMaintenanceMode.php:62, App\Http\Middleware\CheckForMaintenanceMode->handle()
Pipeline.php:171, Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:147-180}()
TrustProxies.php:57, App\Http\Middleware\TrustProxies->handle()
Pipeline.php:171, Illuminate\Routing\Pipeline->Illuminate\Pipeline\{closure:/var/www/open-banking-api/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:147-180}()
Pipeline.php:105, Illuminate\Routing\Pipeline->then()
Kernel.php:151, App\Http\Kernel->sendRequestThroughRouter()
Kernel.php:116, App\Http\Kernel->handle()
index.php:55, {main}()

我想目前的解决方法是跳过第一个断点,但我很想知道它发生的原因以及如何阻止它这样做。

- - 编辑

xdebug 的自定义 php.ini 设置:

zend_extension="xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=docker.for.mac.localhost
xdebug.remote_port=9001
xdebug.remote_autostart=1
xdebug.idekey=PHPSTORM

标签: phpcomposer-phpxdebug

解决方案


推荐阅读