我正在尝试设置一个停靠的AMP环境,无法让远程调试器工作.我的设置如下:
我有一个运行mysql的数据库容器,它像魅力一样工作.我使用以下Dockerfile构建了一个Docker镜像'phpmysqli'
FROM php:apache
RUN docker-php-ext-install mysqli mbstring
# zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
RUN pecl install xdebug
RUN echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so' >> /usr/local/etc/php/php.ini
RUN touch /usr/local/etc/php/conf.d/xdebug.ini; \
echo xdebug.remote_enable=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
echo xdebug.remote_autostart=0 >> /usr/local/etc/php/conf.d/xdebug.ini; \
echo xdebug.remote_connect_back=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
echo xdebug.remote_port=9000 >> /usr/local/etc/php/conf.d/xdebug.ini; \
echo xdebug.remote_log=/tmp/php5-xdebug.log >> /usr/local/etc/php/conf.d/xdebug.ini;
RUN echo 'date.timezone = Europe/Berlin' > /usr/local/etc/php/conf.d/date.ini
Run Code Online (Sandbox Code Playgroud)
我打电话
docker run --rm -ti --name web -p 127.0.0.1:8080:80 -v /path/to/projects:/var/www/html --link db:db phpmysqli
Run Code Online (Sandbox Code Playgroud)
在这个phpinfo分别php -i显示xdebug 2.3.2启动并运行之后.
接下来,我在IntelliJ IDEA中设置一个名为'Docker'的服务器,其中包含Host 127.0.0.1,Port 8080和Debugger Xdebug.我在docker …
我正在尝试使用VSCode调试在Docker上运行的PHP应用程序,但没有成功.
在过去,我能够使用运行WAMP Server的VSCode轻松调试我的PHP应用程序,但自从我开始使用Docker后,我无法进行调试工作.在线搜索了几个教程,在StackOverflow上检查了一些线程(例如:Docker和XDebug没有读取断点VSCode),但我仍然无法使其正常工作.
Dockerfile:
FROM php:7.1.8-apache
COPY /cms /srv/app/cms
COPY .docker/cms/vhosts/vhost.conf /etc/apache2/sites-available/cms.conf
COPY .docker/cms/vhosts/vhost-ssl.conf /etc/apache2/sites-available/cms-ssl.conf
COPY .docker/cms/vhosts/certificate.conf /etc/ssl/certs/certificate.conf
COPY .docker/cms/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
WORKDIR /srv/app/cms
RUN docker-php-ext-install mbstring pdo pdo_mysql
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN chown -R www-data:www-data /srv/app/cms
RUN openssl req -x509 -new -out /etc/ssl/certs/ssl-cert-cms.crt -config /etc/ssl/certs/certificate.conf
RUN a2ensite cms.conf
RUN a2ensite cms-ssl.conf
RUN a2enmod rewrite
RUN a2enmod ssl
Run Code Online (Sandbox Code Playgroud)
xdebug.ini
[xdebug]
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=0
xdebug.remote_host='host.docker.internal'
xdebug.idekey='VSCODE'
xdebug.remote_autostart=1
Run Code Online (Sandbox Code Playgroud)
泊坞窗,compose.yml
version: '3.7'
services:
cms:
build:
context: . …Run Code Online (Sandbox Code Playgroud) 我正在尝试xdebug在 Ubuntu上安装:
sudo apt-get install php-xdebug
Run Code Online (Sandbox Code Playgroud)
并收到以下错误:
需要获得 806 kB 的档案。此操作后,将使用 4.423 kB 的额外磁盘空间。Err:1 http://ppa.launchpad.net/ondrej/php/ubuntu artful/main amd64 php-xdebug amd64 2.5.5-3+ubuntu17.10.1+deb.sury.org+1 404 Not Found E: Failed to获取 http://ppa.launchpad.net/ondrej/php/ubuntu/pool/main/x/xdebug/php-xdebug_2.5.5-3+ubuntu17.10.1+deb.sury.org+1_amd64.deb 404 未找到 E : 无法获取一些档案,也许运行 apt-get update 或尝试使用 --fix-missing?
我怎么解决这个问题 ?
根据这篇文章http://devzone.zend.com/article/2803,var_dump应该美化输出.
我已经使用PHP Version 5.3.3-1ubuntu9.2在我的本地主机上安装了xdebug.我在php.ini输出中有这个.
该程序使用Zend脚本语言引擎:Zend Engine v2.3.0,版权所有(c)1998-2010 Zend Technologies with Xdebug v2.1.0,Copyright(c)2002-2010,Derick Rethans
但是,当我使用var_dump()时,没有任何变化.
xdebug真的美化了var_dump输出吗?
如果是这样,我该如何解决?
这是我在php.ini中的xdebug的详细信息
xdebug
xdebug support enabled
Version 2.1.0
Supported protocols Revision
DBGp - Common DeBuGger Protocol $Revision: 1.145 $
Directive Local Value Master Value
xdebug.auto_trace Off Off
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.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 …Run Code Online (Sandbox Code Playgroud) 我很快就会加入一个已经开发了几年的PHP项目.这将是巨大的,稀疏文档,许多文件,成堆的代码,没有合理的质量水平是预期的.
您将如何收集尽可能多的有关正在发生的事情的信息?
自动加载不被预期的,至少不广泛,所以 inclued可能做好揭示的相互依赖关系.
使用phpDocumentor摘要项目文件可能会了解存在哪些类/方法/函数.
也许phpCallGraph用于方法/函数关系.
使用XDebug分析一些通用用例, 以了解层次结构和概念.
检查重要的日志文件...检查警告,弃用的用法,错误.
也许提取所有注释并将它们处理成html文件.
没有涵盖单元测试,数据库,....
你会怎么做?您对提到的工具有什么经验可以充分利用它们?
您可以假设任何必要的条件.
提取哪些统计信息可能有用?
有人有这些工具的经验吗?
编辑从"PHP工具的质量检查":
来自Bryan Waters的编辑2回答:
检查Apache日志和Google Analytics数据,找出最常请求的URL,然后分析使用XDebug分析和KCachegrind等工具发生的情况.
请参阅他对具体技术的回答.
为PHP项目设置部署/构建/ CI循环 - 由Pekka建议
编辑3
刚刚发现这篇由Gabriele Santini撰写的PDF文章 - "代码的统计分析 - 收听你的PHP代码".这就像一个金矿.
我想知道如何让XDebug与Aptana Studio 3一起工作(我已经在这台机器上安装了Aptana Studio 3和XAMPP).
你知道最近的一篇文章告诉我如何做到这一点并解释了XDebug吗?我没有经验也没有任何关于XDebug的知识,我寻找文章,但所有看起来都过时了.
我在任何地方都找不到任何相关信息.我有一个由HTTP请求触发的长时间运行进程,然后由HTTP请求触发的另一个短进程检查长时间运行进程的状态.两者都是通过AJAX调用的.第一个是通过按钮单击,第二个是连续超时.
如果我一次运行一个请求,那么它们就可以工作了.问题是,在运行第一处理时,Eclipse的完全忽略所述第二请求(如果第一个没有结束),但我需要同时第一请求仍在处理要调试的第二请求
我甚至尝试独立于调试器运行第一个进程,只是尝试将调试器用于第二个进程.但是我似乎无法像第一个那样在调试器中捕获第二个进程.
理想情况下,我希望能够同时调试2个或更多进程.
看来这可以使用Eclipse和Java完成.但PHP支持看起来很薄.
我真的很不知道发生了什么 - 这一切都始于PHPUnit Error: No code coverage driver is available在尝试运行测试覆盖率报告时的错误,最后我调试到下面描述的可复制集.但要设置阶段 - 我使用的是Laravel 5.5,Xdebug 2.5.5,PHPUnit 6.5.5.我的测试代码说明了这个问题:
<?php
use Tests\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出 C:\Users\xxx\AppData\Local\Temp\7598.tmp
将它与输出正确的php.ini路径的代码进行比较:
<?php
use PHPUnit\Framework\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出: C:\server\php\php.ini
怎么会这样?加载的php.ini文件如何根据执行的代码进行更改?更好的是 - 如何加载我正确的php.ini文件(启用了xdebug),而不是这个冒号?
在这两种情况下,测试都是使用 phpunit tests\unit\a
文件夹结构是:
Laravel Project
????tests
????Unit
????A.php
Run Code Online (Sandbox Code Playgroud) 我有Eclipse PDT的xdebug设置.每次我启动调试会话时,Eclipse都会在我的根index.php文件的第一行中断.是否有可能阻止这种行为?
我在ruby上有点被宠坏了,我习惯使用pry应用程序的惊人设施.我将一个应用程序锁定为1个线程,然后让pry在httpd控制台中弹出,然后能够解决很多问题的底部,但是我没有发现任何类似于PHP的可用内容.是否有类似或接受的解决方案,这样的PHP用于在执行期间调试和跟踪数据结构等?