我一直在尝试为Mac OS X Lion启用Xdebug,但无法使其正常工作.这应该是非常直接的,但它对我不起作用.
这些是我采取的步骤:
1 - 取消注释php.ini文件的这一行:
zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
Run Code Online (Sandbox Code Playgroud)
2 - 重启我的Apache服务器
sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)
3 - 检查是否通过phpinfo()函数启用了它.事实上,它既可以作为Zend模块启用,也可以作为单独的模块启用.
但它不起作用.每次在我的php脚本中发生错误时,默认情况下都会使用丑陋的错误处理来显示它们.var_dumps也不起作用.
我错过了一步吗?
在phpMyAdmin,我们遭受了一段时间的奇怪testuite减速.我们已经能够将问题跟踪到启用xdebug时的情况(代码覆盖率),并且ob_start/ob_end_clean块中存在错误.去除其中任何一个都会大大减少测试时间.
xdebug enabled disabled
ob_start failure tests
enabled 20 min 15 s
disabled 1 min 15 s
Run Code Online (Sandbox Code Playgroud)
这只是为了表明差异有多大以及为什么我们要摆脱它.
在较小的规模,这可以通过单一测试显示test/classes/PMA_Advisor_test.php:
xdebug enabled disabled
ob_start failure tests
enabled 7.2 s 0.1 s
disabled 2.6 s 0.1 s
Run Code Online (Sandbox Code Playgroud)
这里的区别在于删除一个测试的单个数据集(如果你要查看源代码,它是最后一个数据集)并导致测试花费的时间不到一半!更新:在这种特殊情况下,可以使用缓解问题xdebug.default_enable=0,但对于整个测试套件而言,这并没有太大变化.
乍一看它确实看起来像xdebug中的一些bug,但是我们无法生成比上面更小的测试用例,这听起来很可疑.任何想法如何进一步调试问题如何找出实际导致这种减速的原因?
我希望xdebug只追踪超过X ms或超过Y KB RAM的"跳跃",例如,每次执行时间超过100毫秒或增加内存使用量超过100KB.这样我就可以忽略数千条我不需要查看的跟踪线,并且可以使优化变得更加容易 - 因为在ZF2中,膨胀的框架需要1秒才能开始使用我们企业项目中的composer autoloader,结果在成千上万行中我真的没用.沿着这条线的某个地方,我确实发现了执行时间的较大跳跃,但不是经过长时间的滚动.
是否有一个默认选项来禁用"比X更快"执行的日志记录,或者如果没有,你知道一个帮助shell/python脚本可以只是慢速的那些吗?
为了澄清,我正在讨论通过在我的应用程序中运行xdebug_start_trace()获得的.xt文件的内容.
我在PHPStorm中使用Xdebug和我的本地apache webserver进行调试.我也在使用CodeSniffer来检查我的代码风格.CodeSniffer(phpcs.bat)是一个可以在PHPstorm中启用的工具,它实际上是一个每3-5秒运行一次的外部PHP脚本.令人讨厌的是,每当我启用调试(侦听连接)时,它都会尝试调试phpcs脚本,即使它不是我项目的一部分.甚至更奇怪的是phpcs是通过php命令行运行的,而不是Xdebug所属的apache服务器.
反正有没有阻止phpStorm调试这个外部命令行脚本?
NikiC在另一个帖子中说:
在[foreach]迭代之前,
$array"软复制"用于foreach.这意味着没有实际的副本,但只有zval的refcount$array增加到2.
但是,我的测试代码显示了不同的结果:
$array = array(0, 1, 2);
xdebug_debug_zval('array'); // refcount=1, is_ref=0
// so far so good
foreach ($array as $key => $value) {
xdebug_debug_zval('array'); // refcount=3, is_ref=0
} // why is refcount 3 instead of 2?
Run Code Online (Sandbox Code Playgroud)
只需查看代码,我们最多可以看到两个数组变量.
为什么要引用引用计数3?
运行2后为什么不引用refcount foreach?
我安装了PHP 5.5.3的MAMP.
我的php.ini文件(MAMP/conf/php5.5.3/php.ini)的结尾是这样的:
[OPcache]
zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/opcache.so"
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
[xdebug]
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1
zend_extension="/Applications/MAMP/bin/php/php5.5.3/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so"
Run Code Online (Sandbox Code Playgroud)
但是,使用var_dump()进行测试时,xdebug仍无法正常工作.
我还能尝试什么?
编辑:我每次尝试改变时都重新启动了MAMP.我还检查了phpinfo().它在这里说我需要从MAMP编辑文件,而不是从finder编辑.但我无法找到MAMP让我去文件的地方......
我设法将xdebug与docker和phpstorm结合使用.对于http调用... IE
http://192.168.99.100:8081/?XDEBUG_SESSION_START=PHPSTORM
但是当我尝试运行我的phpunit测试时,它没有与phpstorm连接
我在phpstorm中执行了正确的目录映射,并在docker-instance上运行了以下命令 export XDEBUG_CONFIG="idekey=PHPSTORM"
我也试过我的docker:导出PHP_IDE_CONFIG ='serverName = web.docker'并在phpstorm web.docker上命名服务器配置.仍然在http而不是CLI上工作
那么我可以将phpstorm和xdebug一起用于命令行吗?
这是我的档案: /etc/php5/cli/conf.d/20-xdebug.ini
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.idekey=PHPSTORM
xdebug.remote_connect_back=1
xdebug.remote_host=172.17.42.1
dxdebug.remote_autostart=1
Run Code Online (Sandbox Code Playgroud)
当我打开日志记录,并使用xdebug_remote_host IP地址时,我得到了
W: Remote address not found, connecting to configured address/port: localhost:9000. :-|
E: Could not connect to client. :-(
Log closed at 2015-10-13 12:20:39
Log opened at 2015-10-13 12:22:58
I: Checking remote connect back address.
W: Remote address not found, connecting to configured address/port: 172.17.42.1:9000. :-|
E: Could not connect to client. :-(
Log closed at …Run Code Online (Sandbox Code Playgroud) 每当我尝试运行此代码时
example@testserver:~$ sudo apt-get install php5-xdebug
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php5-xdebug
Run Code Online (Sandbox Code Playgroud)
我收到此错误"E: Unable to locate package php5-xdebug"
请帮助谢谢
我刚开始在Visual Studio Code(Ubuntu 14.04)中使用PHP Debug扩展.它对我来说效果很好,但我有一个问题,每次抛出异常时,调试器会自动中断.我们有许多异常,这些异常在我们的代码中被内部捕获和处理,因此我不想逐步完成这些异常.
我一直试图找到类似Visual Studio 2015中的异常设置,但在Visual Studio Code中找不到任何等效选项.
php.ini设置:
[debug]
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
Run Code Online (Sandbox Code Playgroud)
Visual Studio Code launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000,
"args": ["some arguments"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
请注意,当我使用相同的xdebug设置和相同的代码库来使用Netbeans进行调试时,没有违反异常的行为,因此我认为这必须是Visual Studio Code和/或PHP Debug扩展中的内容.
谁能建议如何在不破坏的情况下通过异常?
$a = [1, 2, 3];
xdebug_debug_zval('a');
$b = $a;
xdebug_debug_zval('a');
unset($b);
xdebug_debug_zval('a');
Run Code Online (Sandbox Code Playgroud)
这将输出
a: (refcount=2, is_ref=0)=array (2 => (refcount=0, is_ref=0)=1, 1 =>(refcount=0, is_ref=0)=2)
a: (refcount=3, is_ref=0)=array (2 => (refcount=0, is_ref=0)=1, 1 => (refcount=0, is_ref=0)=2)
a: (refcount=2, is_ref=0)=array (2 => (refcount=0, is_ref=0)=1, 1 => (refcount=0, is_ref=0)=2)
Run Code Online (Sandbox Code Playgroud)
为什么在第一行refcount是2