迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

如何使用Clion搭建PHP源码调试环境

作者:迹忆客 时间:2021/05/28 浏览次数:

本文主要介绍分析源码的方式,其中包含环境的搭建、分析工具的安装以及源码调试的基本操作。


一、 工具清单

  • PHP7.1.10
  • GDB
  • Clion

二、 源码下载及安装

关于php源码的下载和安装这里就不进行赘述


三、 GDB的安装与调试

3.1 安装

GDB的安装就不介绍

3.2 调试

创建php文件: index.php

<?php
    echo "Hello world!";
?>

打开gdb

$ gdb php # 将显示如下内容
GNU gdb (GDB) 8.3
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin18.5.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from php56...
(gdb)

调试创建的php文件

# 断点main函数
(gdb) b main
Breakpoint 1 at 0x1007123f0: file sapi/cli/php_cli.c, line 1215.
(gdb) run index.php
Starting program: /usr/local/bin/php56 index.php
[New Thread 0x1a03 of process 81529]
[New Thread 0x2803 of process 81529]
[New Thread 0x2703 of process 81529]
Thread 3 hit Breakpoint 1, main (argc=2, argv=0x7ffeefbff8f0) at sapi/cli/php_cli.c:1215
warning: Source file is more recent than executable.
1215        int exit_status = SUCCESS;
(gdb) next
1216        int module_started = 0, sapi_started = 0;
(gdb)

经过上面的步骤就可以使用GDB进行PHP源码的调试了。


四、CLion的配置与调试

4.1 配置

打开clion,选中菜单栏中的 File-> New Cmake project from Source... , 选择下载的源码包。

注意: 这里选择的源码包是要使用 configure 配置过的。

Clion搭建PHP源码调试环境创建项目与配置
在导入源码的过程中,这里使用默认的选择就可以。
导入源码之后,打开项目根目录的CMakeLists.txt,将该文件的代码替换为下面的内容,注意版本和源码目录要根据实际位置进行调整。

cmake_minimum_required(VERSION 3.15)
project(makefile)

set(CMAKE_CXX_STANDARD 14)

set(PHP_SOURCE /Users/mihuan/workspace/c/php-7.1.10)
include_directories(${PHP_SOURCE}/main)
include_directories(${PHP_SOURCE}/Zend)
include_directories(${PHP_SOURCE}/sapi)
include_directories(${PHP_SOURCE}/pear)
include_directories(${PHP_SOURCE}/TSRM)
include_directories(${PHP_SOURCE})

add_custom_target(makefile COMMAND make && sudo make install WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

完成后,要重新加载该文件的内容(CLion 会有提示,可以选择自动重载)。 然后打开菜单栏 Run->Edit Configurations... , target 选择 makefile(这里要和CMakeLists.txt中的project(makefile) 一致); Executable 选择PHP的可执行二进制程序;Program arguments填写要执行的脚本文件(php文件,如上面GDB调试的时候所用的index.php);Working Directory填写要执行的脚本文件的存放目录。
CLion搭建PHP源码环境配置执行命令

4.2 调试

上面配置完成之后,我们来验证一下配置是否成功。先在工作目录(上面填写的Working Directory)中创建index.php。

<?php
    echo "Hello world!";
?>

回到CLion,打开sapi/cli/php_cli.c文件,在main函数里设置断点,如下图
Clion搭建PHP源码调试环境打断点
然后点击菜单Run->Debug makefile,等待编译完成后,若出现下图就说明我们的努力有了回报。
CLion搭建PHP源码环境断点运行

说明1: 在CMakeLists.txt中,最后一段代码中使用了... sudo make install ...。因为我的是Mac系统,将PHP安装到/usr/local 下面需要使用sudo。如果有权限可以不使用sudo。

说明2: 在配置CLion的过程Run->Edit Configurations...中,Executable 需要选择PHP的可执行二进制程序。如果使用的是Mac的,并且我们的php是安装在/usr/local/(假设是/usr/local/php) 下,那么二进制程序是不能被选择的到的。因为CLion是不能进入类似 /usr/local;/usr/lib;/etc ... 等这类目录中的。所以我们需要在我们的“家”目录中选择一个地方创建一个软链接(如:/Users/jiyi/workspace/bin) 代码如下:

$ sudo ln -s /usr/local/php/bin/php ~/workspace/bin/php

然后选择~/workspace/bin/php 即可。

说明3: 上面CMakeLists.txt 中有下面一段代码

add_custom_target(makefile COMMAND make && sudo make install WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

如果PHP已经编译安装完成之后,就可以不再需要 COMMAND make && sudo make install 了,它的功能是每次在CLion中点击运行/调试的时候都会先运行这两个命令——makesudo make install。这样的话每次都要重新编译和安装,最恼人的是mac系统还需要每次输入用户密码,很麻烦。所以说PHP安装完成之后这部分可以去掉,形式如下

add_custom_target(makefile WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

除非注明转载,本站文章均为原创,欢迎转载,转载请以链接形式注明出处

本文地址:

迹忆客

专注技术分享,项目实战分享!

技术宅 乐于分享 7年编程经验
社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

热门文章

热门标签