1. 程式人生 > >clion除錯php擴充套件

clion除錯php擴充套件

除錯原理:將父程序作為監聽程序,子程序執行程式程式碼,這樣所有的訊號都需要經過父程序,所以也就可以控制除錯了.
除錯的必要的幾個因素:
1. 有除錯符號的可執行檔案,類似  gcc -g aa.c出來的a.out
2. 能找到原始碼檔案,也就是aa.c檔案,php原始碼也是如此.
3. 滿足以上兩個條件,就可以順利除錯,理解這點很重要

只有自己親手實踐了,才知道是如此的簡單。先理解如何愉快的除錯,才是開發擴充套件的第一步,除非你不想深入學習。

  1. 下載好php原始碼包,然後編譯安裝debug版本的php。
  2. 寫一個簡單的擴充套件。
  3. 將擴充套件程式碼匯入到clion中,記住只是擴充套件程式碼。
  4. 配置CMakeLists.txt檔案,從php原始碼中匯入。
  5. 配置gdb執行環境,deubg,跑起來

安裝

sudo ./configure --prefix=/usr/local/php7_debug --enable_debug

生成擴充套件

sudo ./ext_skel --extname=lion

clion匯入擴充套件原始碼

clion->import project from sources
這裡寫圖片描述

這裡寫圖片描述

引入php原始碼當中的標頭檔案

cmake_minimum_required(VERSION 3.7)
project(lion)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES
        lion.c
        php_lion.h)

add_executable
(lion ${SOURCE_FILES}) #定義php原始碼路徑,這裡根據自己的真實路徑來更改 set(PHP_SOURCE /usr/local/src/php-7.1.4) #引入php需要的擴充套件原始碼,這裡也是根據自己需要的來更改 include_directories(${PHP_SOURCE}/main) include_directories(${PHP_SOURCE}/Zend) include_directories(${PHP_SOURCE}/sapi) include_directories(${PHP_SOURCE}/pear) include_directories(${PHP_SOURCE}
) add_custom_target(makefile COMMAND sudo /usr/local/phpdebug/bin/phpize && ./configure --with-php-config=/usr/local/phpdebug/bin/php-config && make WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})

clion配置中如此設定

這裡寫圖片描述

好了,跑吧,讓程式乖乖的停在任意斷點.

如何除錯php原始碼呢?

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

vscode除錯php核心

vscode是一個非常輕量級的編輯器,微軟的良心之作,今天就用他來開發和除錯php的核心或者擴充套件非常的方便。

  1. 安裝c/c++外掛
  2. 配置lanunch.json和tasks.json

這裡寫圖片描述

這裡寫圖片描述

launch.json

{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "php_core_haha",
            "type": "cppdbg",
            "request": "launch",
            "program": "/usr/local/phpdebug/bin/php",
            "args": ["/Users/lion/wwwroot/php/aa.php"],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb",
            "preLaunchTask": "php_ext_task"
        }
    ]
}

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "php_ext_task",
            "type": "shell",
            "command": "cd /usr/local/src/php-7.1.4/ext/lion && sudo /usr/local/phpdebug/bin/phpize && ./configure --with-php-config=/usr/local/phpdebug/bin/php-config && make",
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}

成功後圖片
這裡寫圖片描述

這裡寫圖片描述