PhpStorm Debugger extension is not detected while using with PHPUnit

15,057

Solution 1

Your Xdebug settings look fine to me. It shows expected values for PHPUnit and it works for a web page debug.

This has to be the IDE settings / some IDE misconfiguration. In particular, make sure that you have selected the default PHP Interpreter. Even though you have specified one in your Run/Debug Configuration, PhpStorm still requires a project-default interpreter to be selected -- it's a know limitation: WI-51570.

Settings/Preferences | Languages & Frameworks | PHP | CLI Interpreter

enter image description here

NOTE: as of 2021.1 version the PHP settings node has been moved to the top level and now it's Settings/Preferences | PHP | CLI Interpreter

enter image description here

P.S. You can also set it via File | New Projects Settings | Settings for New Projects.... This way it will be set for all future new projects created on that computer (which you can then change as required on per project basis).

Solution 2

I had this problem. I fixed it by specifying the CLI Interpreter in Preferences > PHP

enter image description here

Solution 3

this will not work in your docker sicne the steps will be removed when running the container:

RUN echo 'export PATH="$PATH:$HOME/.composer/vendor/bin"' >> ~/.bashrc
RUN source ~/.bashrc

you may use:

ENV PATH="$PATH:$HOME/.composer/vendor/bin"

Update

you may also not using the IP in your config, instead you can map the port to your host when starting your container

first change XDEBUG_REMOTE_HOST=172.17.0.1 to XDEBUG_REMOTE_HOST=0.0.0.0

Solution 4

I had this same issue. However it turned out in XDebug 3 the port changed to 9003.

Ctrl + Alt + S > Languages & Frameworks > PHP > Debug > Debug Port to 9003

Share:
15,057

Related videos on Youtube

BastienSander
Author by

BastienSander

I code since i'm 10. I'll code untill i die. I want to work for projects that matters: Sustainable development or social projects.

Updated on June 14, 2021

Comments

  • BastienSander
    BastienSander about 3 years

    I am using PHPUnit through PhpStorm with a remote interpreter from docker. The Container is run through docker-compose

    PHPUnit works. Xdebug works through the browser. In docker-php-ext-xdebug.ini, I have all the mandatory options, and I can see in the CLI Interpreter Config that PhpStorm does load this config.

    BUT when I try to run PHPUnit with the debugger I get:

    PhpStorm Debugger extension is not detected

    PhpStorm Debugger extension is not detected

    CLI Interpreter Config:

    CLI Interpreter Config

    DockerFile

    FROM php:7.4-fpm-alpine
    
    # OS DEPENDENCIES
    RUN apk update
    RUN apk add --no-cache bash git curl libmcrypt libmcrypt-dev openssh-client icu-dev
    RUN apk add --no-cache libxml2-dev freetype-dev libpng-dev libjpeg-turbo-dev zip libzip-dev g++ make autoconf
    RUN apk add --no-cache postgresql-dev
    RUN docker-php-source extract
    RUN pecl install xdebug redis
    RUN docker-php-ext-enable xdebug redis
    RUN docker-php-source delete
    RUN docker-php-ext-install -j$(nproc) pgsql
    RUN docker-php-ext-install -j$(nproc) pdo_pgsql
    RUN docker-php-ext-install soap intl zip
    RUN docker-php-ext-install opcache
    
    # XDEBUG CONFIGURATION
    ARG XDEBUG_REMOTE_HOST
    ARG XDEBUG_REMOTE_PORT
    ARG XDEBUG_REMOTE_CONNECT_BACK
    ARG XDEBUG_INI=/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
    
    RUN echo "error_reporting = E_ALL" >> ${XDEBUG_INI}
    RUN echo "display_startup_errors=1" >> ${XDEBUG_INI}
    RUN echo "display_errors=1" >> ${XDEBUG_INI}
    RUN echo "xdebug.profiler_enable=1" >> ${XDEBUG_INI}
    RUN echo "xdebug.remote_enable=1" >> ${XDEBUG_INI}
    RUN echo "xdebug.remote_connect_back=$XDEBUG_REMOTE_CONNECT_BACK" >> ${XDEBUG_INI}
    RUN echo "xdebug.idekey=\"PHPSTORM\"" >> ${XDEBUG_INI}
    RUN echo "xdebug.remote_handler=dbgp" >> ${XDEBUG_INI}
    RUN echo "xdebug.remote_port=$XDEBUG_REMOTE_PORT" >> ${XDEBUG_INI}
    RUN echo "xdebug.remote_host=$XDEBUG_REMOTE_HOST" >> ${XDEBUG_INI}
    RUN echo "xdebug.remote_autostart=1" >> ${XDEBUG_INI}
    
    # COMPOSER INSTALLATION
    COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
    
    # EXORT COMPOSER GLOBAL PATH
    ENV PATH="$PATH:$HOME/.composer/vendor/bin" #edited
    

    docker-compose.yaml

      dataapi:
        container_name: dataapi
        build:
          context: ${DOCKER_FILES_PATH}/privateapi/
          args:
            - XDEBUG_REMOTE_PORT=10000
            - XDEBUG_REMOTE_HOST=172.17.0.1 #DOCKER network IP
            - XDEBUG_REMOTE_CONNECT_BACK=0  #edited
        command: sh -c "composer install && bin/console doctrine:migrations:migrate --allow-no-migration -n && php-fpm"
    

    UPDATE:

    Here is the result of phpinto() in phpunit:

    sodium
    
    sodium support => enabled
    libsodium headers version => 1.0.18
    libsodium library version => 1.0.18
    
    SPL
    
    SPL support => enabled
    Interfaces => OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject
    Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException
    
    sqlite3
    
    SQLite3 support => enabled
    SQLite Library => 3.32.1
    
    Directive => Local Value => Master Value
    sqlite3.defensive => 1 => 1
    sqlite3.extension_dir => no value => no value
    
    standard
    
    Dynamic Library Support => enabled
    Path to sendmail => /usr/sbin/sendmail -t -i
    
    Directive => Local Value => Master Value
    assert.active => 1 => 1
    assert.bail => 0 => 0
    assert.callback => no value => no value
    assert.exception => 0 => 0
    assert.quiet_eval => 0 => 0
    assert.warning => 1 => 1
    auto_detect_line_endings => 0 => 0
    default_socket_timeout => 60 => 60
    from => no value => no value
    session.trans_sid_hosts => no value => no value
    session.trans_sid_tags => a=href,area=href,frame=src,form= => a=href,area=href,frame=src,form=
    unserialize_max_depth => 4096 => 4096
    url_rewriter.hosts => no value => no value
    url_rewriter.tags => form= => form=
    user_agent => no value => no value
    
    tokenizer
    
    Tokenizer Support => enabled
    
    xdebug
    
    xdebug support => enabled
    Version => 2.9.6
    Support Xdebug on Patreon, GitHub, or as a business: https://xdebug.org/support
    
    Debugger => enabled
    IDE Key => PHPSTORM
    
    Directive => Local Value => Master Value
    xdebug.auto_trace => Off => Off
    xdebug.cli_color => 0 => 0
    xdebug.collect_assignments => Off => Off
    xdebug.collect_includes => On => On
    xdebug.collect_params => 0 => 0
    xdebug.collect_return => Off => Off
    xdebug.collect_vars => Off => Off
    xdebug.coverage_enable => On => On
    xdebug.default_enable => On => On
    xdebug.dump.COOKIE => no value => no value
    xdebug.dump.ENV => no value => no value
    xdebug.dump.FILES => no value => no value
    xdebug.dump.GET => no value => no value
    xdebug.dump.POST => no value => no value
    xdebug.dump.REQUEST => no value => no value
    xdebug.dump.SERVER => no value => no value
    xdebug.dump.SESSION => no value => no value
    xdebug.dump_globals => On => On
    xdebug.dump_once => On => On
    xdebug.dump_undefined => Off => Off
    xdebug.file_link_format => no value => no value
    xdebug.filename_format => no value => no value
    xdebug.force_display_errors => Off => Off
    xdebug.force_error_reporting => 0 => 0
    xdebug.gc_stats_enable => Off => Off
    xdebug.gc_stats_output_dir => /tmp => /tmp
    xdebug.gc_stats_output_name => gcstats.%p => gcstats.%p
    xdebug.halt_level => 0 => 0
    xdebug.idekey => PHPSTORM => PHPSTORM
    xdebug.max_nesting_level => 256 => 256
    xdebug.max_stack_frames => -1 => -1
    xdebug.overload_var_dump => 2 => 2
    xdebug.profiler_append => Off => Off
    xdebug.profiler_enable => On => On
    xdebug.profiler_enable_trigger => Off => Off
    xdebug.profiler_enable_trigger_value => no value => no value
    xdebug.profiler_output_dir => /tmp => /tmp
    xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p
    xdebug.remote_addr_header => no value => no value
    xdebug.remote_autostart => On => On
    xdebug.remote_connect_back => Off => Off
    xdebug.remote_cookie_expire_time => 3600 => 3600
    xdebug.remote_enable => On => On
    xdebug.remote_host => 172.17.0.1 => 172.17.0.1
    xdebug.remote_log => no value => no value
    xdebug.remote_log_level => 7 => 7
    xdebug.remote_mode => req => req
    xdebug.remote_port => 10000 => 10000
    xdebug.remote_timeout => 200 => 200
    xdebug.scream => Off => Off
    xdebug.show_error_trace => Off => Off
    xdebug.show_exception_trace => Off => Off
    xdebug.show_local_vars => Off => Off
    xdebug.show_mem_delta => Off => Off
    xdebug.trace_enable_trigger => Off => Off
    xdebug.trace_enable_trigger_value => no value => no value
    xdebug.trace_format => 0 => 0
    xdebug.trace_options => 0 => 0
    xdebug.trace_output_dir => /tmp => /tmp
    xdebug.trace_output_name => trace.%c => trace.%c
    xdebug.var_display_max_children => 128 => 128
    xdebug.var_display_max_data => 512 => 512
    xdebug.var_display_max_depth => 3 => 3
    
    xml
    
    XML Support => active
    XML Namespace Support => active
    libxml2 Version => 2.9.10
    
    xmlreader
    
    XMLReader => enabled
    
    xmlwriter
    
    XMLWriter => enabled
    
    Zend OPcache
    
    Opcode Caching => Disabled
    Optimization => Disabled
    SHM Cache => Enabled
    File Cache => Disabled
    Startup Failed => Opcode Caching is disabled for CLI
    
    Directive => Local Value => Master Value
    opcache.blacklist_filename => no value => no value
    opcache.consistency_checks => 0 => 0
    opcache.dups_fix => Off => Off
    opcache.enable => On => On
    opcache.enable_cli => Off => Off
    opcache.enable_file_override => Off => Off
    opcache.error_log => no value => no value
    opcache.file_cache => no value => no value
    opcache.file_cache_consistency_checks => On => On
    opcache.file_cache_only => Off => Off
    opcache.file_update_protection => 2 => 2
    opcache.force_restart_timeout => 180 => 180
    opcache.huge_code_pages => Off => Off
    opcache.interned_strings_buffer => 8 => 8
    opcache.lockfile_path => /tmp => /tmp
    opcache.log_verbosity_level => 1 => 1
    opcache.max_accelerated_files => 10000 => 10000
    opcache.max_file_size => 0 => 0
    opcache.max_wasted_percentage => 5 => 5
    opcache.memory_consumption => 128 => 128
    opcache.opt_debug_level => 0 => 0
    opcache.optimization_level => 0 => 0x7FFEBFFF
    opcache.preferred_memory_model => no value => no value
    opcache.preload => no value => no value
    opcache.preload_user => no value => no value
    opcache.protect_memory => Off => Off
    opcache.restrict_api => no value => no value
    opcache.revalidate_freq => 2 => 2
    opcache.revalidate_path => Off => Off
    opcache.save_comments => On => On
    opcache.use_cwd => On => On
    opcache.validate_permission => Off => Off
    opcache.validate_root => Off => Off
    opcache.validate_timestamps => On => On
    
    zip
    
    Zip => enabled
    Zip version => 1.15.6
    Libzip headers version => 1.6.1
    Libzip library version => 1.6.1
    
    zlib
    
    ZLib Support => enabled
    Stream Wrapper => compress.zlib://
    Stream Filter => zlib.inflate, zlib.deflate
    Compiled Version => 1.2.11
    Linked Version => 1.2.11
    
    Directive => Local Value => Master Value
    zlib.output_compression => Off => Off
    zlib.output_compression_level => -1 => -1
    zlib.output_handler => no value => no value
    
    Additional Modules
    
    Module Name
    
    Environment
    
    Variable => Value
    PATH => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/.composer/vendor/bin
    HOSTNAME => fb6d372627df
    JETBRAINS_REMOTE_RUN => 1
    IDE_PHPUNIT_PHPUNIT_PHAR => /var/www/privateapi/vendor/bin/.phpunit/phpunit-7.5-0/phpunit
    IDE_PHPUNIT_VERSION => 7.5.20
    PHPIZE_DEPS => autoconf         dpkg-dev dpkg       file        g++         gcc         libc-dev        make        pkgconf         re2c
    PHP_INI_DIR => /usr/local/etc/php
    PHP_EXTRA_CONFIGURE_ARGS => --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi
    PHP_CFLAGS => -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
    PHP_CPPFLAGS => -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
    PHP_LDFLAGS => -Wl,-O1 -pie
    GPG_KEYS => 42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312
    PHP_VERSION => 7.4.7
    PHP_URL => https://www.php.net/distributions/php-7.4.7.tar.xz
    PHP_ASC_URL => https://www.php.net/distributions/php-7.4.7.tar.xz.asc
    PHP_SHA256 => 53558f8f24cd8ab6fa0ea252ca8198e2650160649681ce5230c1df1dc2b52faf
    PHP_MD5 =>  
    HOME => /root
    APP_ENV => test
    KERNEL_CLASS => App\Kernel
    APP_AUTH_API_HOST => http://authapi
    DATABASE_URL_TEST => postgresql://postgres:[email protected]:5433/privateapi_test
    CORS_ALLOW_ORIGIN => ^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
    
    PHP Variables
    
    Variable => Value
    $_ENV['PATH'] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/.composer/vendor/bin
    $_ENV['HOSTNAME'] => fb6d372627df
    $_ENV['JETBRAINS_REMOTE_RUN'] => 1
    $_ENV['IDE_PHPUNIT_PHPUNIT_PHAR'] => /var/www/privateapi/vendor/bin/.phpunit/phpunit-7.5-0/phpunit
    $_ENV['IDE_PHPUNIT_VERSION'] => 7.5.20
    $_ENV['PHPIZE_DEPS'] => autoconf        dpkg-dev dpkg       file        g++         gcc         libc-dev        make        pkgconf         re2c
    $_ENV['PHP_INI_DIR'] => /usr/local/etc/php
    $_ENV['PHP_EXTRA_CONFIGURE_ARGS'] => --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi
    $_ENV['PHP_CFLAGS'] => -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
    $_ENV['PHP_CPPFLAGS'] => -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
    $_ENV['PHP_LDFLAGS'] => -Wl,-O1 -pie
    $_ENV['GPG_KEYS'] => 42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312
    $_ENV['PHP_VERSION'] => 7.4.7
    $_ENV['PHP_URL'] => https://www.php.net/distributions/php-7.4.7.tar.xz
    $_ENV['PHP_ASC_URL'] => https://www.php.net/distributions/php-7.4.7.tar.xz.asc
    $_ENV['PHP_SHA256'] => 53558f8f24cd8ab6fa0ea252ca8198e2650160649681ce5230c1df1dc2b52faf
    $_ENV['PHP_MD5'] => 
    $_ENV['HOME'] => /root
    $_ENV['APP_ENV'] => test
    $_ENV['KERNEL_CLASS'] => App\Kernel
    $_ENV['APP_AUTH_API_HOST'] => http://authapi
    $_ENV['DATABASE_URL_TEST'] => postgresql://postgres:[email protected]:5433/privateapi_test
    $_ENV['CORS_ALLOW_ORIGIN'] => ^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
    $_ENV['APP_SECRET'] => $ecretf0rt3st
    $_ENV['DATABASE_URL'] => 
    $_ENV['SYMFONY_DOTENV_VARS'] => APP_SECRET,DATABASE_URL,SYMFONY_DEPRECATIONS_HELPER,PANTHER_APP_ENV
    $_ENV['SYMFONY_DEPRECATIONS_HELPER'] => 999999
    $_ENV['PANTHER_APP_ENV'] => panther
    $_ENV['APP_DEBUG'] => 1
    

    Set Up:

    • Ubuntu 20.04
    • PhpStorm 2020.1.4
    • Docker 19.03.12
    • docker-compose 1.26.0
    • LazyOne
      LazyOne almost 4 years
      "XDEBUG_REMOTE_CONNECT_BACK=1" and xdebug.remote_connect_back -- try getting rid of this (make sure it's = 0). If xdebug.connect_back is enabled then xdebug.remote_host is ignored. It works for you for a web page debug as you have an IP there ... but for CLI debug (which is what PHPUnit is) there is no IP in request data... (P.S. This is about Xdebug connection, not about actual Xdebug extension detecting).
    • LazyOne
      LazyOne almost 4 years
      I would also suggest to create some fake PHPUnit test and try to debug it: get phpinfo() output there (Xdebug section in particular; save into a file) and see what values will be there. Maybe it somehow has different values at that moment (for some unknown yet reason)
    • BastienSander
      BastienSander almost 4 years
      I did the change for connect_back, it is still not working. I edited the question with the phpinfo() output from phpunit
    • LazyOne
      LazyOne almost 4 years
      1) Xdebug section looks OK to me -- it's there and enabled as far as I can see. Can you enable Xdebug log and try to debug (your PHPUnit tests; can try a web page as well, but make them completely separate logs) -- what will it show?
    • LazyOne
      LazyOne almost 4 years
      2) Please show your PHPUnit settings from IDE -- it could be IDE misconfiguration on your end (not selecting PHP Interpreter for the project). The idea based on this comment: youtrack.jetbrains.com/issue/…
  • BastienSander
    BastienSander almost 4 years
    I did the change and rebuild the image, but I have the same behaviour.
  • LinPy
    LinPy almost 4 years
    please add how you start the container ? did you setup the ports and the network correctly that your IDE can find them ?
  • BastienSander
    BastienSander almost 4 years
    I will add those information. XDebug works with the browser, just not with PHPUnit.
  • BastienSander
    BastienSander almost 4 years
    I see your updates. I don't really get why I shall do that because I already have XDebug working, just not with PHPUnit. I tested your update and it doesnt work better, and now if I want to use xdebug with the browser, it says me that the port 10000 is Busy (which is due to the port mapping)
  • LazyOne
    LazyOne almost 4 years
    "ports:- "10000:10000"" You do not need that: It's Xdebug that connects to IDE and NOT other way around. With that in place you tell Docker to use that port and now IDE is unable to listen on that port (and not able to accept incoming connections).
  • BastienSander
    BastienSander almost 4 years
    @LazyOne Thats also how I understand it.Yet it doesnt solve my problem :(
  • Oliver Baumann
    Oliver Baumann almost 4 years
    Setting a default CLI interpreter fixed it for me, too. Head to Settings > Languages & Frameworks > PHP > CLI interpreter, and set whichever one you need.
  • Gruffy
    Gruffy over 3 years
    Setting the project-wide default interpreter worked for me as well.
  • obe
    obe about 2 years
    Arrived here. Discovered that I had already upvoted this answer a year ago or so. Problem still exists in 2022.1. @JetBrains how much effort can it possibly be to update your error message or show a helpful popup when clicking on it?