使用 Xdebug 调试 WordPress - PHP 致命错误:未捕获的错误:调用未定义的函数 get_header()

问题描述

我正在尝试使用 Xdebug 和 PHPStorm 调试 wordpress 安装。

如果我在functions.PHP的顶部写这个:

[line 1]: <?PHP
[line 2]: $test = '1234';

并在第 2 行设置一个断点,然后运行“Debug functions.PHP”,然后我点击了该断点,我就可以在 PHPStorm 中调试该断点。到目前为止一切顺利!

但是如果我将它向下移动到functions.PHP底部,并执行相同的操作,则会出现错误

PHP Fatal error: Uncaught Error: Call to undefined function add_action() in /path/to/project/wp-content/themes/my-theme-name/functions.PHP:44
#0 {main}
堆栈跟踪:
在第 44 行的 /path/to/project/wp-content/themes/my-theme-name/functions.PHP 中抛出

第 44 行如下所示:

[line 43]: include_once( __DIR__ . '/classes/AdminNotice.PHP' );
[line 44]: add_action('admin_notices',[new AdminNotice(),'displayAdminNotice']);

我也试过调试其他文件

喜欢page.PHP。同样的事情 - 如果我在顶部添加我的演示代码(和断点),那么它就可以工作。 但是如果我把它移到底部,它就会在 get_header() 上绊倒。错误

PHP Fatal error: Uncaught Error: Call to undefined function get_header() in /path/to/project/wp-content/themes/my-theme-name/page.PHP:6
堆栈跟踪:
#0 {main}
在第 6 行的 /Users/zethodderskov/Code/Greenmind/V2-1__local/app/public/wp-content/themes/my-theme-name/page.PHP 中抛出

第 6 行如下所示:

get_header(); ?>

如果我在导入的类中设置断点,那么它不会在该断点处停止(即使我 100% 确定它到达了代码的那部分)。

这可能是因为它是在 POST 请求期间到达的。嗯……我讨厌做菜鸟。


有用的情报

  • 我尝试了很多次设置 Xdebug,但从未成功。这是我得到的最接近的。所以这可能是一些愚蠢的错误
  • 我使用的是 PHP 8.0.6 版、Xdebug 3.0.4 版和 PHPStorm 2020.3.1 版 - 版本号 #PS-203.6682.180。
  • 远程服务器是一个 Cloudways-server
  • 我已将 wordpress(和 WooCommerce)定义为外部库(语言和框架 >> PHP)。所以 PHPStorm 应该知道 wordpress功能。我可以 CMD+单击 wordpress 功能并查看功能定义。
  • 如果我转到“运行”>>“Web 服务器调试验证”并单击“验证”,则会显示所有绿色勾号。
  • 我遵循最多的指南是这个Zero-configuration Xdebug debugging
  • 这是我本地 PHP.ini 文件内容
...
... Omitted lines
...

[xdebug]
zend_extension="/usr/local/lib/PHP/pecl/20200930/xdebug.so"
xdebug.mode=debug
xdebug.client_host=12.123.123.123 (IP to Cloudways-server)
xdebug.client_port=9003

; End of file
  • 在 Cloudways 中,我已将这些行添加到远程服务器上的 PHP.ini(在“应用程序设置”>>“PHP FPM 设置”下):
PHP_admin_value[display_errors]=on
PHP_admin_value[memory_limit]=2048M
PHP_value[xdebug.remote_enable]=1
PHP_value[xdebug.mode]=debug
PHP_value[xdebug.client_host]=87.116.38.66

回复评论 1

正如@LazyOne 指出的那样,我可能正在调试单个文件,而我正在尝试调试正在运行的整个项目。

我只是不确定如何做到这一点。如果我转到“运行”>>“编辑配置”(在调试下),则会到达此对话框:

PhpStorm Xdebug edit configuration

而且我不确定我应该在这里做什么,因为它“强迫我”定义我要调试的文件

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)