xdebug配置错误:函数注册失败 - 重复名称

时间:2014-05-06 05:35:48

标签: php xdebug

我正在尝试使用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();
    

1 个答案:

答案 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值。要在我们的代码上设置断点并测试调试器,请遵循以下简单步骤。

  • 打开&#34; index.php&#34;我们的测试项目
  • 找到代码行&#34; $ X. = 8;&#34;然后单击它以将闪烁的光标放在那里
  • 在Eclipse上转到:&#34;工具栏→运行→切换断点&#34;,您也可以使用 热键&#34; shift + ctrl + B&#34;或者只需双击该行即可 编辑器最左侧的代码行数 切换断点
  • 设置断点时,您应该看到它 表示为在行号旁边的一个小圆圈 编辑的左侧

现在是时候执行我们的项目,看看调试器如何帮助我们调试代码。

  • 在Eclipse上转到:&#34;工具栏→运行→调试&#34;,您也可以使用热键&#34; F11&#34;或者只需点击&#34;小虫图标&#34;位于顶部的第二个工具栏
  • 自动Eclipse将打开配置的Web浏览器,并且还会更改为&#34; Debug透视图&#34;,调试透视图包含一组用于执行调试任务的预配置视图,其中包括:
    • 调试视图:显示用于控制当前运行的调试会话的按钮,此视图还包含当前调用堆栈
    • 断点视图:在任何项目文件中显示所有设置的断点
    • 变量视图:基本上是&#34; var dump&#34;在您的实际会话的所有PHP变量中,它可以让您轻松导航抛出这些变量的任何变量和子成员。
    • 表达式视图:您可以设置自定义表达式,即&#34; $ X + $ Y + $ Z&#34;并且在不改变代码的情况下查看每个表达式的结果。
    • 内部浏览器视图和输出视图:如果未配置外部浏览器,则为可选Eclipse IDE将使用当前页面和当前页面HTML输出显示此视图
  • 此时我们的网页看起来应停止,浏览器很可能会显示空白页面&#34;等待&#34;加载其余部分
  • 请注意,当前断点有一个&#34;小箭头&#34;如果突出显示在圆圈和代码行上,则表示要执行的下一行代码是什么,也称为&#34;当前步骤&#34;
  • 如果您看一下&#34;变量视图&#34; &#34; $ X&#34;的当前值应该是&#34; 5&#34;
  • 转到&#34;调试视图&#34;然后按下按钮&#34;跳过&#34;或使用热键&#34; F6&#34;在代码执行中向前迈进一步
  • 再看一下&#34;变量视图&#34; &#34; $ X&#34;的当前值现在应该是&#34; 8&#34;
  • 通过这种方式,您可以整齐地研究代码和值如何逐步变化,您还可以将鼠标指针悬停在编辑器中的变量名称上Eclipse IDE将弹出它们的当前值。
  • 继续前行直至代码行结束,此时网页浏览器应显示最终的网页输出