标签: xdebug

使用自己的异常处理程序时保留 Xdebug 异常处理

我在 PHP 项目中编写了自己的异常和错误处理程序。

但是,在进行开发时,除了我自己的处理之外,我还想让 XDebug 执行正常的“异常”和“错误”处理。

我发现如果我自己的错误处理程序返回 FALSE,我可以很容易地让 XDebug 继续执行“错误”处理。但我找不到一种方法来通过“异常”处理获得类似的效果。

我希望我可以手动调用 XDebug 函数。xdebug_print_function_stack() 是我能看到的最接近的东西,但它不会给出触发异常的真实堆栈跟踪。

php exception xdebug

6
推荐指数
1
解决办法
723
查看次数

通过 -z 参数加载 xdebug

根据 PHP 手册页,存在以下命令行选项:

  --zend-extension file
   -z file        Load Zend extension file
Run Code Online (Sandbox Code Playgroud)

这大概意味着您可以通过这种方式将 xdebug 作为 zend 扩展加载,从而仅在您实际需要时才加载 Xdebug,这对我来说很有帮助,因为 xdebug 会严重减慢 Drupal 单元测试的速度,但我可能需要调试一些测试。

但是,以这种方式加载 Xdebug 似乎不起作用。

环境:MacOS 10.10、PHP 5.6.3-dev、Xdebug 2.2.5。

$> ls -l /usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
-rwxr-xr-x  1 root  wheel  319276 Oct 24 13:45 /usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
$> grep xdebug /usr/local/etc/php/5.6/php.ini
zend_extension=/usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
$> php -v |grep -i xdebug
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)

很明显,当在php.ini文件中指定时,xdebug 会正确加载。当我注释掉 xdebug 行时,

> grep xdebug /usr/local/etc/php/5.6/php.ini
;zend_extension=/usr/local/lib/php/extensions/debug-non-zts-20131226/xdebug.so
Run Code Online (Sandbox Code Playgroud)

您可以看到它没有正确加载:

> php -i|grep -i xdebug
>
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用 …

php xdebug command-line-interface

6
推荐指数
1
解决办法
551
查看次数

PHP:打印捕获异常,如 Xdebug

我有一个 PHP 函数,当我发现异常时会调用它。它接受该异常作为可选参数,因此可以出于调试目的显示它:

public static function notFound($resource, \Exception $exception = null) {
    // [... normal error handling ...]

    if (DEBUG && $exception != null) {
        echo '<br><br><h2>Stacktrace:</h2>';
        print_r($exception);          
    }
    die();
}
Run Code Online (Sandbox Code Playgroud)

我想要的是以与 xdebug 显示未捕获的异常和警告相同的方式显示此异常(使用 CSS 和 HTML 样式,可能使用不同的配色方案)。像这样(由echo $exception->getTrace();):

在此处输入图片说明

如果我使用print_r($exception);我得到这个,它似乎至少包含一些 xdebug 所需的输出:

在此处输入图片说明

我试过echo $exception->xdebug_message;, var_dump($exception);, 和var_dump($exception->xdebug_message);,但都没有奏效。最后一个似乎是我想要的,但我无法让它正常工作:

在此处输入图片说明

有没有办法对捕获的异常使用 xdebug 样式?

php exception xdebug

6
推荐指数
2
解决办法
1479
查看次数

为什么 xdebug 不识别 localhost,只识别 127.0.0.1

当我尝试调试我的 Web 应用程序时,我正面临这个问题。无论我使用的是 127.0.0.1 还是本地主机,该页面都可以加载,但断点仅适用于 127.0.0.1。我正在使用 Intellij 和 MAMP。我的php.ini配置如下:

[xdebug]
zend_extension="/Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.remote_log="/Applications/MAMP/xdebug_log.txt"
Run Code Online (Sandbox Code Playgroud)

我也尝试添加

xdebug.remote_host="localhost"
Run Code Online (Sandbox Code Playgroud)

但这没有区别,同样的问题仍然存在。我的主机文件如下:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
Run Code Online (Sandbox Code Playgroud)

此外,当我想调试 html 页面时,我必须在主 php 文件上执行此操作,例如调试 index.html,我必须执行以下操作:

http://127.0.0.1/<the_folder>/index.php?xdebug_session_start=intellij
Run Code Online (Sandbox Code Playgroud)

有时它有效,有时它不起作用!我必须尝试几次才能使其正常工作。有时意味着尝试各种项目或尝试仅使用 Intellij 中的“调试”调试 php 脚本。我只添加了“PHP Script”配置,即单独调试php。也有这个“PHP Web 应用程序”配置......它做了我上面所做的,但没有解决我的问题。

在此处输入图片说明

总结: 1)为什么 xdebug 在解析“localhost”进行调试时有问题?2) 如何有效地调试我的 web 应用程序 html 文件中加载的 php 脚本?

php debugging xdebug intellij-idea

6
推荐指数
0
解决办法
210
查看次数

是否可以在 php 内置 Web 服务器上使用 xdebug?

我有一台带有 apache2 和 php7 的计算机,我将php.ini其设置为使用 xdebug 并且可以,我可以使用编辑器进行调试。

但是我想在另一台只有php的计算机上调试。

我使用以下方法启动服务器: php -S localhost:8080

我尝试使用相同的php.ini,但似乎 php 内置的网络服务器无法理解php.ini

我使用了命令: php -S localhost:8080 -c <<path to my php.ini>>

这里是 apache 服务器的 phpinfo 输出:

在此处输入图片说明

这里是内置网络服务器的输出:

在此处输入图片说明

php xdebug php-builtin-server

6
推荐指数
1
解决办法
2788
查看次数

为什么我的 Laravel 项目中的 VS Code 断点不起作用?

我正在使用 VS Code 来调试我的 Laravel 项目。我已经安装了 PHP Debug 扩展并将 PHP 配置为使用 XDebug 进行调试。服务器是 Apache(使用 Xampp)。我可以使用浏览器访问我的网站,但是我使用 VS Code 在我的项目中设置的断点从未被命中?我在这里做错了什么?

breakpoints xdebug laravel visual-studio-code

6
推荐指数
1
解决办法
5416
查看次数

使用 Xdebug 作为调试器在 Docker 容器上通过 VSCode 调试 Laravel

我正在尝试使用 Xdebug 在 Visual Studio Code 上调试 Laravel 代码。我正在使用 Docker 容器作为服务器。

但我在尝试调试时收到此错误:

无法连接到运行时进程,10000 毫秒后超时 - (原因:无法连接到目标:连接 ECONNREFUSED 192.168.99.100:9000)。

这是我的 VSCodelaunch.json

    "version": "0.2.0",
    "configurations": [

        {
            "type": "node",
            "request": "attach",
            "name": "Docker: Attach to Node",
            "port": 9000,
            "address": "192.168.99.100",
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/var/www",
            "protocol": "inspector",
            "restart": true
        }
]
Run Code Online (Sandbox Code Playgroud)

这是docker-compose.yml

  app:
    build:
      context: ./
      dockerfile: .docker/app.dockerfile
      args:
      - INSTALL_XDEBUG=true
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment:
      - "DB_PORT=33061"
      - "DB_HOST=192.168.99.100"
      - XDEBUG_CONFIG=remote_host=192.168.99.100 remote_port=9000 remote_connect_back=0
Run Code Online (Sandbox Code Playgroud)

这是我的app.dockerfile

FROM php:7.1-fpm

RUN docker-php-ext-install …
Run Code Online (Sandbox Code Playgroud)

xdebug docker laravel-5 visual-studio-code

6
推荐指数
1
解决办法
8437
查看次数

如何让 PhpStorm 在“vendor”文件夹中的断点处停止?

我已经在我自己的项目代码中设置了 PhpStorm 和 XDebug 并且运行良好。

但是,当我需要调试vendor文件夹中的某些内容时,PhpStorm 不会在断点处停止。

我该如何设置?

xdebug phpstorm

6
推荐指数
1
解决办法
1157
查看次数

加载 xdebug.so 失败:未定义符号:gc_globals

我尝试在我的计算机上安装 PHP 的 Xdebug 扩展(Linux Mint,PHP 版本 7.3.6)。

我已按照Xdebug 向导页面的说明进行操作。完成后,我在终端中运行了以下命令:

php --version
Run Code Online (Sandbox Code Playgroud)

它向我显示了我的 PHP 版本,但也显示了以下警告:

加载失败 /usr/lib/php/20180731/xdebug.so: /usr/lib/php/20180731/xdebug.so: 未定义符号: gc_globals

调用 phpinfo() 时,Xdebug 也未列为已启用的扩展。你能帮忙吗,我的 Xdebug 安装哪里有问题?

我已经使用向导页面中的以下步骤安装了 Xdebug:

• Download xdebug-2.7.2.tgz
• Install the pre-requisites for compiling PHP extensions.
• On your Ubuntu system, install them with: apt-get install php-dev autoconf automake
• Unpack the downloaded file with tar -xvzf xdebug-2.7.2.tgz
• Run: cd xdebug-2.7.2
• Run: phpize (See the FAQ if you don't have phpize).
• 
• …
Run Code Online (Sandbox Code Playgroud)

php installation xdebug

6
推荐指数
1
解决办法
4620
查看次数

Docker Compose 和 Xdebug 无法在 PhpStorm 中工作

我尝试了很多方法,试图让 Xdebug 在 Docker 容器中工作。我接触到了这些资源:

我认为问题要么是我不理解的端口,要么是调试器会话未启动或识别。对于调试器会话,我还尝试安装一个设置 cookie 的浏览器扩展。

我最终至少拥有了单独的容器,其中一个作为启用了 Xdebug 的开发容器。

docker-compose.yml

version: "3"
services:
  production:
    build: .
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/html
  development:
    build: .
    ports:
      - "8080:80"
#      - "10000:80" also not working
    volumes:
      - .:/var/www/html
      - ./dev.php.ini:/usr/local/etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)

Dockerfile

FROM php:7.4.0-apache

RUN pecl install …
Run Code Online (Sandbox Code Playgroud)

php xdebug phpstorm docker docker-compose

6
推荐指数
1
解决办法
1万
查看次数