我正在尝试使用xdebug
来调试一个非常大的php系统。我已将以下行添加到Linux系统上的php.ini
:
[XDebug]
zend_extension = "/usr/lib/php4/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so"
xdebug.profiler_append = 0
xdebug.profiler_enable = 1 ;
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "/tmp"
然而,重启apache
后,我无法在网络浏览器中重新加载php生成的页面。 apache错误日志包含以下输出:
PHP Warning: Function registration failed - duplicate name - xdebug_get_stack_depth in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_get_function_stack in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_print_function_stack in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_get_declared_vars in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_call_class in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_call_function in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_call_file in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_call_line in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_var_dump in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_debug_zval in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_debug_zval_stdout in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_enable in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_disable in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_is_enabled in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_break in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_start_trace in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_stop_trace in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_get_tracefile_name in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_get_profiler_filename in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_dump_aggr_profiling_data in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_clear_aggr_profiling_data in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_time_index in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_start_code_coverage in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_stop_code_coverage in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_get_code_coverage in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_get_function_count in Unknown on line 0
PHP Warning: Function registration failed - duplicate name - xdebug_dump_superglobals in Unknown on line 0
PHP Warning: xdebug: Unable to register functions, unable to load in Unknown on line 0
[Wed Jun 11 17:26:56 2014] [notice] Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/4.4.9-pl0-gentoo configured -- resuming normal operations
[Wed Jun 11 17:27:01 2014] [notice] child pid 21745 exit signal Segmentation fault (11)
[Wed Jun 11 17:27:02 2014] [notice] child pid 21752 exit signal Segmentation fault (11)
如何修复此问题以便我可以使用xdebug
来调试php系统?
其他信息:
xdebug.ini
个文件 - 因此我从xdebug
删除了所有php.ini
相关文字。 我在我要调试的php代码中添加了以下两行:
xdebug_enable();
xdebug_start_trace();
答案 0 :(得分:1)
为PHP开发配置Xdebug / Linux
XDEBUG EXTENSION FOR PHP | DOCUMENTATION
<强>安装强>
有多种方法可以将Xdebug下载并安装到Linux机器箱,您可以通过软件中心,终端或手动下载来实现。
方法1:从Linux存储库
提示!
这是推荐的方法,因为您将获得更新和 安全补丁自动。
选项1:终端
打开终端并输入
sudo apt-get install php5-xdebug
等到安装过程完成
选项2:软件中心
打开您的发行版附带的软件中心 在搜索框中键入&#34; Eclipse IDE&#34; 选择&#34; Eclipse IDE&#34;在搜索结果列表中 点击&#34;安装&#34;按键 等到安装过程完成
方法2:从下载的副本
在此处访问此页面并下载最新版本 双击下载的文件,您的包管理器应自动完成剩余的工作http://packages.debian.org/sid/php5-xdebug
配置Xdebug
打开终端并输入
sudo gedit /etc/php5/mods-available/xdebug.ini
如果文件为空,请尝试此位置
sudo gedit /etc/php5/conf.d/xdebug.ini
hat命令应该使用Xdebug配置文件打开文本编辑器 在文件内容的末尾添加以下文本
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
保存更改并关闭编辑器 在您的终端类型
sudo service apache2 restart
注意:如果需要,您可以设置不同的端口号。 配置Eclipse IDE
打开Eclipse IDE 在Eclipse上转到:&#34;工具栏→窗口→首选项→PHP→调试&#34; 找到选项:&#34; PHP Debugger&#34;并将其设置为&#34; Xdebug&#34; 在Eclipse上转到:&#34; Toolbar→Window→Preferences→PHP→Debug→Installed Debugger&#34; 在列表中确保端口为&#34; Xdebug&#34;选项设置为值&#34; 9000&#34; 保存更改
注意:如果需要,您可以设置不同的端口号。
当您调试PHP项目时,Xdebug会停止当前页面的代码执行,默认情况下Eclipse IDE会弹出一个透视图,其中包含2个包含内部Eclipse IDE Web浏览器的视图和一个包含当前HTML输出的视图,如果您没有&像内部网络浏览器一样,您可以使用计算机中安装的任何其他外部网络浏览器,例如gogle chrome,chrome,firefox等...甚至不尝试IE,只是开玩笑:p
要设置不同的Web浏览器,请按照以下步骤操作,如果您对Eclipse内部浏览器没问题,请跳过此部分:
在Eclipse上转到:&#34;工具栏,窗口,首选项,常规,Web浏览器&#34; 确保选项&#34;使用外部浏览器&#34;被选中 如果首选浏览器位于列表中,请选择它并保存更改并跳过本部分的其余部分 如果您的首选浏览器不在列表中,请按下按钮&#34; New&#34; 为新浏览器设置一个名称,即&#34; chrome&#34; 设置新浏览器的位置,即&#34; / usr / bin / google-chrome&#34; 如果您不知道浏览器的位置,请打开终端并使用命令&#34; whereis browsername&#34;显示浏览器位置。注意:将browsername替换为首选浏览器的名称,即&#34; whereis google-chrome&#34;如果有多个位置,请复制其中一个位置 保存所有更改
测试Xdebug和Eclipse IDE
要测试我们全新的调试工具,我们需要创建一个Eclipse PHP项目,为我们的项目设置调试配置并编写几行PHP代码。这个例子假设了三件事:
您了解&#34;工作区&#34;的Eclipse IDE概念。和&#34;项目&#34;如果没有,请阅读本文配置Eclipse IDE for PHP development / Linux#了解文件夹结构 如果没有,您已经有了一个可用的Web服务器,请阅读本文。为PHP开发/ Linux桌面配置LAMPP服务器 您的Eclipse工作区位于服务器的Web根文件夹中。
配置工作区
如果当前工作区位于服务器的Web根目录,请跳过此部分 打开Eclipse IDE 在Eclipse上转到:&#34;工具栏→文件→切换工作区→其他&#34; 按下按钮&#34;浏览&#34;并浏览服务器的Web根文件夹的位置,即&#34; / home / youruser / lamp / public_html /&#34; 按&#34;确定&#34;等到Eclipse IDE重新启动并加载新工作区
配置测试项目
在Eclipse上转到:&#34;工具栏→文件→新建→其他→PHP→PHP项目&#34; 将项目名称设置为&#34; xdebug-test&#34;或者你喜欢什么 按&#34;确定&#34;接着说 在此Eclipse IDE将自动创建这样的项目文件夹&#34; / home / youruser / lamp / public_html / xdebug-test /&#34;之后,您应该能够在Eclipse IDE Project Explorer中可视化新项目。查看或导航视图 在Eclipse上转到:&#34;工具栏→文件→新建→其他→PHP→PHP文件&#34; 将文件名设置为&#34; index.php&#34; 按&#34;确定&#34;接着说 在此Eclipse IDE将自动创建这样的PHP文件&#34; /home/youruser/lamp/public_html/xdebug-test/index.php"之后,您应该能够在Eclipse IDE中可视化新文件Project Explorer视图或导航视图 找到新的&#34; index.php&#34;在Eclipse IDE项目资源管理器中打开文件并双击它打开它 将以下内容放在该文件中:
<?php
$X = 5;
$X = 8;
$Y = 2;
$Z = $X + $Y;
$Z = $Z + 1;
echo "Z value is: " . $Z;
?>
保存更改 打开您的Web浏览器并导航到
&#34; http://example.com/xdebug-test/index.php&#34;
它应该显示一个web和这样的输出
Z value is: 11
配置测试项目调试信息
在Eclipse上转到:&#34;工具栏→运行→调试配置......&#34; 在左侧列表中找到&#34; PHP Web应用程序&#34;并双击它以创建新的配置元素 选择新配置元素以显示其内容 将名称设置为&#34; xdebug-test&#34;或者你喜欢什么 确保选项&#34;服务器调试器&#34;设置为&#34; Xdebug&#34; 确保选项&#34; Break at first Line&#34;没有检查 在选项&#34;文件&#34;按下按钮&#34;浏览&#34;,找到您的项目&#34; xdebug-test&#34;并展开它的内容,然后找到并选择文件&#34; index.php&#34; 确保选项网址看起来像这样&#34; http://example.com/xdebug-test/index.php&#34; 按&#34;应用&#34;和&#34;关闭&#34;保存更改并继续
调试测试项目
正如您所见,我们的&#34; index.php&#34;文件有几行代码,用调试器我们可以研究那些代码行是如何逐个执行的,但要停止执行我们需要设置一些名为&#34; Breakpoint&#34 ;,一个断点是一个&#34;标记&#34;在我们的代码行中,指示调试器停止执行并轮询var值。要在我们的代码上设置断点并测试调试器,请遵循以下简单步骤。
现在是时候执行我们的项目,看看调试器如何帮助我们调试代码。